詳解Java8的groupBy實(shí)現(xiàn)集合的分組
場(chǎng)景:
Java8的groupBy實(shí)現(xiàn)集合的分組,類似Mysql的group by分組功能,注意得到的是一個(gè)map
1.對(duì)集合按照單個(gè)屬性分組
e.g. 按照skuId分組
Map<String, List<EntryDeliveryDetailywk>> detailsMap01 = dtos1.stream() .collect(Collectors.groupingBy(EntryDeliveryDetailywk::getskuId));
2對(duì)集合按照多個(gè)屬性分組
solution 1 多個(gè)屬性拼接出一個(gè)組合屬性
將多個(gè)字段拼接成一個(gè)新字段,在使用Java8的groupBy進(jìn)行分組
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 造靜態(tài)內(nèi)部類
在集合元素類里構(gòu)造靜態(tài)內(nèi)部類(成員變量即分組的對(duì)應(yīng)多個(gè)屬性)
e.g.
//靜態(tài)內(nèi)部類 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 嵌套調(diào)用Java8 groupby
注意得到也是嵌套map
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge)); //調(diào)用 map.get("Fred").get(18);
參考
https://stackoverflow.com/questions/28342814/group-by-multiple-field-names-in-java-8
到此這篇關(guān)于詳解Java8的groupBy實(shí)現(xiàn)集合的分組的文章就介紹到這了,更多相關(guān)Java8 groupBy集合分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java線程的生命周期和狀態(tài)控制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java線程的生命周期和狀態(tài)控制,需要的朋友可以參考下2017-05-05Java:不支持發(fā)行版本5的超詳細(xì)簡(jiǎn)單解決方案
發(fā)行版本5是Java5,已經(jīng)是十多年前的版本了,現(xiàn)在已經(jīng)不再被支持,如果您使用的是舊版的Java開發(fā)工具,可能會(huì)出現(xiàn)這樣的錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java:不支持發(fā)行版本5的超詳細(xì)簡(jiǎn)單解決方案,需要的朋友可以參考下2024-01-01java中 Set與Map排序輸出到Writer詳解及實(shí)例
這篇文章主要介紹了 java中 Set與Map排序輸出到Writer詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03Eclipse+Webservice簡(jiǎn)單開發(fā)實(shí)例
這篇文章主要介紹了Eclipse+Webservice簡(jiǎn)單開發(fā)實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-02-02Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼
Shiro是Apache?的一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼學(xué)和會(huì)話管理,Shiro?主要分為兩個(gè)部分就是認(rèn)證和授權(quán)兩部分,這篇文章主要介紹了Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼,需要的朋友可以參考下2024-07-07