Java8中groupBy实现集合的分组
短信预约 -IT技能 免费直播动态提醒
这篇文章主要介绍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) ));private String fetchGroupKey(EntryDeliveryDetailywk detail){ return detail.getSkuId().toString() + detail.getItemsName() + detail.getWarehouseId().toString() + detail.getSupplierId().toString(); }
solution 2 造静态内部类
在集合元素类里构造静态内部类(成员变量即分组的对应多个属性)
e.g.
//静态内部类class Person { public static class NameAge { public NameAge(String name, int age) { ... } // 注意 重写方法 must implement equals and hash function } public NameAge getNameAge() { return new NameAge(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实现集合的分组”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341