//集合分组
按照类别分组
Map<String, List<Product>> map1 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory));
//列子
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
listDept.add(dept2);
Map<String, List<BBuildDept>> map1 = listDept.stream().collect(Collectors.groupingBy(BBuildDept::getAddress));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
//输出
[{"address":"玉溪","code":"1"},{"address":"红塔区","code":"11"},{"address":"玉溪","code":"11"}]
{"红塔区":[{"address":"红塔区","code":"11"}],"玉溪":[{"address":"玉溪","code":"1"},{"address":"玉溪","code":"11"}]}
按照多个属性拼接分组
Map<String, List<Product>> map2 = prodList.stream().collect(Collectors.groupingBy(item -> item.getCategory() + "_" + item.getName()));
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
listDept.add(dept2);
Map<Object, List<BBuildDept>> map1 = listDept.stream().collect(Collectors.groupingBy(item -> item.getAddress() + "_" + item.getCode()));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1"},{"address":"红塔区","code":"11"},{"address":"玉溪","code":"11"}]
{"玉溪_11":[{"address":"玉溪","code":"11"}],"玉溪_1":[{"address":"玉溪","code":"1"}],"红塔区_11":[{"address":"红塔区","code":"11"}]}
根据不同条件分组
Map<String, List<Product>> map3 = prodList.stream().collect(Collectors.groupingBy
(item -> {
if (item.getNum() > 3) {
return "num大于3";
} else if (item.getNum() < 3) {
return "num小于3";
} else {
return "num等于3";
}
}));
//列子
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(1);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(3);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
Map<Object, List<BBuildDept>> map1= listDept.stream().collect(Collectors.groupingBy
(item -> {
if (item.getNum() > 3) {
return "num大于3";
} else if (item.getNum() < 3) {
return "num小于3";
} else {
return "num等于3";
}
}));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1","num":1},{"address":"红塔区","code":"11","num":3},{"address":"玉溪","code":"11","num":4}]
{"num小于3":[{"address":"玉溪","code":"1","num":1}],"num等于3":[{"address":"红塔区","code":"11","num":3}],"num大于3":[{"address":"玉溪","code":"11","num":4}]}
多级分组
Map<String, Map<String, List<Product>>> map4 = prodList.stream().collect(
Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(item -> {
if (item.getNum() >= 8) {
return "num大于等于8";
} else {
return "num小于8";
}
})));
//列子
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(1);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(3);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
Map<String, Map<Object, List<BBuildDept>>> map1= listDept.stream().collect(
Collectors.groupingBy(BBuildDept::getAddress, Collectors.groupingBy(item -> {
if (item.getNum() >= 3) {
return "num大于等于3";
} else {
return "num小于3";
}
})));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1","num":1},{"address":"红塔区","code":"11","num":3},{"address":"玉溪","code":"11","num":4}]
{"红塔区":{"num大于等于3":[{"address":"红塔区","code":"11","num":3}]},"玉溪":{"num小于3":[{"address":"玉溪","code":"1","num":1}],"num大于等于3":[{"address":"玉溪","code":"11","num":4}]}}
分组后再聚合求总数
Map<String, Long> map5 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.counting()));
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(4);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(3);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
Map<String , Long> map1= listDept.stream().collect(Collectors.groupingBy(BBuildDept::getAddress, Collectors.counting()));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1","num":4},{"address":"红塔区","code":"11","num":3},{"address":"玉溪","code":"11","num":4}]
{"红塔区":1,"玉溪":2}
分组后再做相加运算
Map<String, Integer> map6 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getNum)));
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(4);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(3);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
Map<String, Integer> map1= listDept.stream().collect(Collectors.groupingBy(BBuildDept::getAddress, Collectors.summingInt(BBuildDept::getNum)));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1","num":4},{"address":"红塔区","code":"11","num":3},{"address":"玉溪","code":"11","num":4}]
{"红塔区":3,"玉溪":8}
过滤加分组
Map<Integer, List> peopleByAge = peoples.stream().filter(p -> p.age > 12).collect(Collectors.groupingBy(p -> p.age, Collectors.toList()));
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(4);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(13);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
Map<Object, List<BBuildDept>> map1= listDept.stream().filter(p -> p.getNum() > 3).collect(Collectors.groupingBy(p -> p.getAddress(), Collectors.toList()));
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(map1));
[{"address":"玉溪","code":"1","num":4},{"address":"红塔区","code":"11","num":13},{"address":"玉溪","code":"11","num":4}]
{"红塔区":[{"address":"红塔区","code":"11","num":13}],"玉溪":[{"address":"玉溪","code":"1","num":4},{"address":"玉溪","code":"11","num":4}]}
某个字段的和
int more = pubList.stream().mapToInt(e -> Integer.parseInt(e.get("more").toString())).sum();
List<BBuildDept> listDept=new ArrayList();
BBuildDept dept = new BBuildDept();
dept.setAddress("玉溪");
dept.setCode("1");
dept.setNum(4);
listDept.add(dept);
BBuildDept dept1 = new BBuildDept();
dept1.setAddress("红塔区");
dept1.setCode("11");
dept1.setNum(13);
listDept.add(dept1);
BBuildDept dept2 = new BBuildDept();
dept2.setAddress("玉溪");
dept2.setCode("11");
dept2.setNum(4);
listDept.add(dept2);
int more = listDept.stream().mapToInt(e -> Integer.parseInt(e.getCode())).sum();
System.out.println(JSON.toJSONString(listDept));
System.out.println(JSON.toJSONString(more));
[{"address":"玉溪","code":"1","num":4},{"address":"红塔区","code":"11","num":13},{"address":"玉溪","code":"11","num":4}]
23
排序
list.stream().sorted(Comparator.comparing(a->address.indexOf(a))).forEach(System.out :: println);
list.stream().sorted((a,b)->address.IndexOf(a)-address.IndexOf(b)).forEach(System.out :: println);