Java8中groupBy实现集合的分组

这篇文章主要介绍Java8中groupBy实现集合的分组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

场景:

Java8的groupBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map

Java8中groupBy实现集合的分组

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实现集合的分组”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-03-17 20:53:44
收藏
分享
海报
0 条评论
170
上一篇:Pyqt5怎么实现多线程文件搜索 下一篇:Oracle手动建库安装部署的方法
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码