这篇文章主要介绍Java8中groupBy实现集合的分组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
场景:
Java8的groupBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map
1.对集合按照单个属性分组
e.g. 按照skuId分组
Map<String,List<EntryDeliveryDetailywk>>detailsMap01=dtos1.stream()
.collect(Collectors.groupingBy(EntryDeliveryDetailywk::getskuId));
2对集合按照多个属性分组
solution 1 多个属性拼接出一个组合属性
将多个字段拼接成一个新字段,在使用Java8的groupBy进行分组
Map<String,List<EntryDeliveryDetailywk>>detailmap=details.stream()
.collect(Collectors.groupingBy(d->fetchGroupKey(d)));
privateStringfetchGroupKey(EntryDeliveryDetailywkdetail){
returndetail.getSkuId().toString()
+detail.getItemsName()
+detail.getWarehouseId().toString()
+detail.getSupplierId().toString();
}
solution 2 造静态内部类
在集合元素类里构造静态内部类(成员变量即分组的对应多个属性)
e.g.
//静态内部类
classPerson{
publicstaticclassNameAge{
publicNameAge(Stringname,intage){
...
}
//注意重写方法mustimplementequalsandhashfunction
}
publicNameAgegetNameAge(){
returnnewNameAge(name,age);
}
}
//分组
Map<NameAge,List<Person>>map=people.collect(Collectors.groupingBy(Person::getNameAge));
solution 3 嵌套调用Java8 groupby
注意得到也是嵌套map
Map<String,Map<Integer,List<Person>>>map=people
.collect(Collectors.groupingBy(Person::getName,
Collectors.groupingBy(Person::getAge));
//调用
map.get("Fred").get(18);
以上是“Java8中groupBy实现集合的分组”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!