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) {
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);
https://stackoverflow.com/questions/28342814/group-by-multiple-field-names-in-java-8#
场景:Java8的groupBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map1.对集合按照单个属性分组e.g. 按照skuId分组Map&amp;amp;lt;String, List&amp;amp;lt;EntryDeliveryDetailywk&amp;amp;gt;&amp;amp;gt; detailsMap01 = dtos1.stream().collect(Collectors.groupi...
Stream流-
分组操作
文章目录
Stream流-
分组操作方法1,`
groupingBy(Function)`方法2,`
groupingBy(Function,Collector)`方法3:`
groupingBy(Function,Supplier,Collector)`
Collectors.
groupingBy()3个方法的使用示例
/**员工
* @author Yang
* @create 2020-07-09 19:57
public class Employee {
对List进行分组(java8的Stream 分组的groupBy 的使用)
最近在做一个功能:对一个接口接收的List数据进行校验,同一个订单里的一个产品id只能添加一次。本来想是在入库的时候通过SQL语句进行处理的。但是由于这个数据接口之前同事写了很多的校验,是在是又*又长。在度娘上查一下,发现了JAVA8 可以通过Stream对List进行处理(这里主要是关于分组的);
Order order1 = new Order();
order1.setOrderId("123");
Order1.
java 8 集合分组
在继续阅读Venkat Subramaniam的“ Java函数式编程 ”时,我到达了介绍Stream#collect函数的那部分。
我们想收集一个人,按年龄分组并返回一张方便的地图(年龄->人的名字)。
要刷新,这是Person类的样子:
static class Person {
private String name;
privat...