Java8的groupBy实现集合的分组场景:
Java8的groupBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是⼀个map
1.对集合按照单个属性分组
< 按照skuId分组
groupby分组Map<String, List<EntryDeliveryDetailywk>> detailsMap01 = dtos1.stream()
.upingBy(EntryDeliveryDetailywk::getskuId));
2对集合按照多个属性分组
solution 1 多个属性拼接出⼀个组合属性
将多个字段拼接成⼀个新字段,在使⽤Java8的groupBy进⾏分组
Map<String, List<EntryDeliveryDetailywk>> detailmap = details.stream()
.upingBy(d -> fetchGroupKey(d) ));
private String fetchGroupKey(EntryDeliveryDetailywk detail){
SkuId().toString()
+ ItemsName()
+ WarehouseId().toString()
+ SupplierId().toString();
}
solution 2 造静态内部类
在集合元素类⾥构造静态内部类(成员变量即分组的对应多个属性)
<
//静态内部类
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 = upingBy(Person::getNameAge)); solution 3 嵌套调⽤Java8 groupby
注意得到也是嵌套map
Map<String, Map<Integer, List<Person>>> map = people
.upingBy(Person::getName,
//调⽤
<("Fred").get(18);
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。