list1
{"hjje":"520.00","dan_no":"YSQ2022102"},{"hjje":"351.02","dan_no":"YSQ202206"}
list2
{"shum":"JAVA","dan_no":"YSQ202206"},{"shum":"C++","dan_no":"YSQ2022102"},{"shum":"PHP","dan_no":"YSQ202206"}
list3
{"nj":"三年级二班","dan_no":"YSQ202206"},{"nj":"二年级一班","dan_no":"YSQ2022102"},{"nj":"三年级四班","dan_no":"YSQ202206"},
java8 怎么把上面3个List根据dan_no分组,然后合并到一个List里面?
最终结果:
{"dan_no":"YSQ2022102","shum":"C++","nj":"二年级一班","hjje":"520.00"},{"dan_no":"YSQ202206","shum":"JAVA,PHP","nj":"三年级四班,三年级二班","hjje":"351.02"}
初学,请教。
public static void main(String[] args) {
List<Map<String,String>> list1 = new ArrayList<>();
Map<String,String> map11 = new HashMap();
map11.put("hjje", "520.00");
map11.put("dan_no", "YSQ2022102");
Map<String,String> map12 = new HashMap();
map12.put("hjje", "351.02");
map12.put("dan_no", "YSQ202206");
list1.add(map11);
list1.add(map12);
List<Map<String,String>> list2 = new ArrayList<>();
Map<String,String> map21 = new HashMap();
map21.put("shum", "JAVA");
map21.put("dan_no", "YSQ202206");
Map<String,String> map22 = new HashMap();
map22.put("shum", "C++");
map22.put("dan_no", "YSQ2022102");
Map<String,String> map23 = new HashMap();
map23.put("shum", "PHP");
map23.put("dan_no", "YSQ202206");
list2.add(map21);
list2.add(map22);
list2.add(map23);
List<Map<String,String>> list3 = new ArrayList<>();
Map<String,String> map31 = new HashMap();
map31.put("nj", "三年级二班");
map31.put("dan_no", "YSQ202206");
Map<String,String> map32 = new HashMap();
map32.put("nj", "二年级一班");
map32.put("dan_no", "YSQ2022102");
Map<String,String> map33 = new HashMap();
map33.put("nj", "三年级四班");
map33.put("dan_no", "YSQ202206");
list3.add(map31);
list3.add(map32);
list3.add(map33);
List<Map<String, String>> collect2 = list1.stream().map(m1 -> {
List<String> collect = list2.stream().filter(f -> m1.get("dan_no").equals(f.get("dan_no"))).map(fe -> {
String shum = fe.get("shum").toString();
return shum;
}).collect(Collectors.toList());
String join = String.join(",", collect);
m1.put("shum", join);
List<String> collect1 = list3.stream().filter(f -> m1.get("dan_no").equals(f.get("dan_no"))).map(fe -> {
String shum = fe.get("nj").toString();
return shum;
}).collect(Collectors.toList());
String nj = String.join(",", collect1);
m1.put("nj", nj);
return m1;
}).collect(Collectors.toList());
System.out.println(collect2);
}
参考代码
List<Map<String, Object>> result = list1.stream()
.map(map1 -> list2.stream()
.filter(map2 -> map2.get("dan_no").equals(map1.get("dan_no")))
.map(map2 -> {
Map<String, Object> map = new HashMap<>();
map.putAll(map1);
map.putAll(map2);
return map;
})
.map(map -> list3.stream()
.filter(map3 -> map3.get("dan_no").equals(map.get("dan_no")))
.map(map3 -> {
Map<String, Object> mapResult = new HashMap<>();
mapResult.putAll(map);
mapResult.putAll(map3);
return mapResult;
})
.collect(Collectors.toList()))
.flatMap(List::stream)
.collect(Collectors.toList()))
.flatMap(List::stream)
.collect(Collectors.groupingBy(map -> map.get("dan_no"),
Collectors.reducing(new HashMap<>(), (map1, map2) -> {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("dan_no", map1.get("dan_no"));
resultMap.put("shum", map1.getOrDefault("shum", "") + "," + map2.getOrDefault("shum", ""));
resultMap.put("nj", map1.getOrDefault("nj", "") + "," + map2.getOrDefault("nj", ""));
resultMap.put("hjje", map1.getOrDefault("hjje", "") + "," + map2.getOrDefault("hjje", ""));
return resultMap;
}))).values().stream().map(map -> (Map<String, Object>) map).collect(Collectors.toList());