java8 特性 - groupingBy

java8 將 list 里的數據分組。返回 map 集合。
這里以一個簡化了的訂單類來說明如何分組
數據實體

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class OrderEntity {

    private Integer id;
    private String sn;
    private Integer status;
}

初始化數據

List<OrderEntity> orderEntities = Lists.newArrayList();
orderEntities.add(new OrderEntity(0,"sn000",0));
orderEntities.add(new OrderEntity(1,"sn001",0));
orderEntities.add(new OrderEntity(2,"sn002",1));
orderEntities.add(new OrderEntity(3,"sn003",1));

可能有這樣的需求,查詢不同訂單狀態(tài)的統(tǒng)計信息
就是查詢出所有的訂單 然后計算不同狀態(tài)有多少個。

Map<Integer,Long> rstMap = orderEntities.stream()
                .collect(Collectors.groupingBy(OrderEntity::getStatus,Collectors.counting()));

rstMap.forEach((k,v)-> System.out.println("key - >" + k + " , value -> " + v));

結果如下,狀態(tài)是0的有2個,狀態(tài)是1的也有2個

key - >0 , value -> 2
key - >1 , value -> 2

如果是按照訂單狀態(tài)分組,組里面保存完整的訂單信息

Map<Integer,List<OrderEntity>> rstMap2 = orderEntities.stream()
                .collect(Collectors.groupingBy(OrderEntity::getStatus));

rstMap2.forEach((k,v)-> System.out.println("key - >" + k + " , value -> " + v));

執(zhí)行結果

key - >0 , value -> [OrderEntity(id=0, sn=sn000, status=0), OrderEntity(id=1, sn=sn001, status=0)]
key - >1 , value -> [OrderEntity(id=2, sn=sn002, status=1), OrderEntity(id=3, sn=sn003, status=1)]

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容