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)]