Java Stream提供了一套对数据进行操作的解决方法。
对数据的处理包含:分组
,转化
,归并
,统计
等
分组
对形状列表的数据进行分组操作
首先定义形状类:
@Data
public class Shape {
private String type;
private String color;
public Shape(String type, String color) {
this.type = type;
this.color = color;
}
public String toString() {
return color + type;
}
}
构建列表进行测试:
public class Tester {
public static void main(String[] args) {
List<Shape> shapeList = new ArrayList<>();
shapeList.add(new Shape("圆形", "红色"));
shapeList.add(new Shape("三角形", "红色"));
shapeList.add(new Shape("三角形", "绿色"));
shapeList.add(new Shape("圆形", "绿色"));
shapeList.add(new Shape("正方形", "蓝色"));
shapeList.add(new Shape("正方形", "红色"));
shapeList.add(new Shape("正方形", "绿色"));
Map<String, List<Shape>> result =
shapeList.stream()
.collect(Collectors.groupingBy(Shape::getColor));
System.out.println(result);
}
}
按照颜色分组结果如下:
{蓝色=[蓝色正方形], 绿色=[绿色三角形, 绿色圆形, 绿色正方形], 红色=[红色圆形, 红色三角形, 红色正方形]}
也可以对形状进行分组
result = shapeList.stream().collect(
Collectors.groupingBy(Shape::getType));
System.out.println(result);
按照形状分组结果如下:
{正方形=[蓝色正方形, 红色正方形, 绿色正方形], 圆形=[红色圆形, 绿色圆形], 三角形=[红色三角形, 绿色三角形]}