过滤+分组 filter+groupingBy
代码片段
Map<String, String> map1 = new HashMap<>();
map1.put("year", "1998");
map1.put("name", "linmm");
map1.put("age", "22");
map1.put("sex", "F");
Map<String, String> map2 = new HashMap<>();
map2.put("year", "1997");
map2.put("name", "LiLie");
map2.put("age", "23");
map2.put("sex", "M");
Map<String, String> map3 = new HashMap<>();
map3.put("year", "1998");
map3.put("name", "Anne");
map3.put("age", "22");
map3.put("sex", "F");
Map<String, String> map4 = new HashMap<>();
map4.put("year", "1997");
map4.put("name", "John");
map4.put("age", "22");
map4.put("sex", "F");
List<Map<String, String>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
// 获取符合sex=F的对象并且根据year相同的进行分组
Map<String, List<Map<String, String>>> year_map = list.stream()
.filter(doc -> doc.get("sex").equals("F"))
.collect(Collectors.groupingBy(doc -> doc.get("year")));
year_map.forEach((k, v) -> {
System.out.println(k + " -> " + v);
});
结果输出
1998 -> [{year=1998, sex=F, name=linmm, age=22}, {year=1998, sex=F, name=Anne, age=22}]
1997 -> [{year=1997, sex=F, name=John, age=22}]