我有一个List<Map<String,String>>
例如:
Map<String, String> m1 = new HashMap<>();
m1.put("date", "2020.1.5");
m1.put("B", "10");
Map<String, String> m2 = new HashMap<>();
m2.put("date", "2020.1.5");
m2.put("A", "20");
Map<String, String> m3 = new HashMap<>();
m3.put("date", "2020.1.6");
m3.put("A", "30");
Map<String, String> m4 = new HashMap<>();
m4.put("date", "2020.1.7");
m4.put("C", "30");
List<Map<String, String>> before = new ArrayList<>();
before.add(m1);
before.add(m2);
before.add(m3);
before.add(m4);
我期望的结果是生成一个新的 List 映射,它按 date 分组,并且在同一 date 中设置的所有条目将放在一起,例如:
[{"A":"20","B":"10","date":"2020.1.5"},{"A":"30","date":"2020.1.6"},{"C":"30","date":"2020.1.7"}]
我尝试了以下方法,但始终不是我的预期结果。
stream().flatmap().collect(Collectors.groupingBy())
此问题的一些附加评论:
我用 for LOOP 解决了这个问题,但是当列表大小约为 50000 时应用程序挂起,所以我寻求一种性能更好的方法来做到这一点。据我所知,Java 8 流平面图可能是一种方式。因此,关键点不仅是重新映射它,而且是用最高效的方式来做到这一点。