在Java8之前,我们需要对List根据其中元素的某一字段进行分组时,往往时循环遍历这个List,然后判断元素的字段是否满足要求,然后进行分组,现在Java8提供了一种更优雅更简单的方式: Collectors.groupingBy(),如下示例
组装数据
我们新建一个类:Dog类
public class Dog {
private String name;
private String color;
private int age;
// 省略get set方法
}
组装List集合
List list = new ArrayList<>();
Dog dog1 = new Dog();
dog1.setName("旺财");
dog1.setColor("黑色");
dog1.setAge(5);
Dog dog2 = new Dog();
dog2.setName("大黄");
dog2.setColor("黑色");
dog2.setAge(4);
Dog dog3 = new Dog();
dog3.setName("小黄");
dog3.setColor("白色");
dog3.setAge(6);
分组操作
根据颜色进行分组
Map> groupMap = list.stream().collect(Collectors.groupingBy(Dog::getColor));
System.out.println(JSON.toJSONString(groupMap));
// 输出
{"黑色":[{"color":"黑色"},{"color":"黑色"}],"白色":[{"color":"白色"}]}
注意分组后的返回类型是 Map