java - Java 8 - 列表
问题描述
我有一个List<Map<String, String>>
. 我想将其转换为单个地图。
列表大小可以是 1..n。不确定如何使用 Java 8 Stream 做到这一点?
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("1", "One");
map1.put("2", "Two");
Map<String, String> map2 = new HashMap<>();
map2.put("3", "Three");
map2.put("4", "Four");
mapList.add(map1);
mapList.add(map2);
Map<String, String> finalMap = new HashMap<>();
我们可以在 Java 7 中做这样的事情:
for(Map<String, String> map : mapList) {
for(String key : map.keySet()) {
finalMap.put(key, map.get(key));
}
}
System.out.println("Final Map " + finalMap); // Final Map {1=One, 2=Two, 3=Three, 4=Four}
解决方案
你可以flatMap
,然后使用Collectors.toMap
:
mapList.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
请注意,不处理重复键。要忽略重复项,您可以使用:
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1)
推荐阅读
- javascript - Bootstrap 4滚动到长粘性侧边栏的底部
- docker - gitlab ci 自定义运行程序失败
- r - 二元矩阵中 1 的聚类组
- excel - 如何使 Excel 用户定义函数 (UDF) 接受字符串类型和范围类型的参数?
- r - 递归添加非整数的困难
- python - matplotlib:绘制两条缺失日期不一致的线
- google-apps-script - 使用 GAS 功能通过电子邮件发送电子表格的有效方式?
- javascript - Laravel 5.5 无法使用 ConsoleTV 的图表包渲染动态图表
- python - Python正则表达式在双引号中查找带有变量的字符串
- c - 使用 strcat 在字符串文字上添加空格?