java - 将两张不同类型的地图合并为一张地图
问题描述
我有两张不同类型的地图:
class Type3{
Type1 type1;
Type2 type2;
// getters and setters...
}
Map<Integer,Type1> map1;
Map<Integer,Type2> map2;
我想用同一个键将它们合并到一张地图上。像他的:
Map<Integer,Type3> map3 = // merege map1,map2.
我该怎么做?
解决方案
你可以用Stream
s 做到这一点:
Map<Integer,Type3> output =
map1.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> new Type3(e.getValue(),map2.get(e.getKey()))));
假设Type3
有一个接受Type1
实例和Type2
实例的构造函数。
请注意,输出Map
将仅包含出现在第一个Map
( map1
) 中的键。
如果两个输入Map
s 可能具有另一个映射中不存在的键,则最好通过两个 s 的键集的并集进行流式传输Map
,以免跳过任何键:
Set<Integer> allKeys = new HashSet<> (map1.keySet());
allKeys.addAll(map2.keySet());
Map<Integer,Type3> output =
allKeys.stream()
.collect(Collectors.toMap(Function.identity(),
key -> new Type3(map1.get(key),map2.get(key))));
推荐阅读
- flutter - 如何让 Stack 的一个元素出现在另一个元素之外?
- string - Dart 解析字符串包含地图列表
- reactjs - 尝试在 React-table 中覆盖分页但不起作用
- javascript - 布尔类型不能分配给过滤功能中的类型“团队”
- cocoa - Cocoapods 项目无法在 Apple Silicon / M1 Mac 上构建
- javascript - 加载模块脚本失败:服务器以“text/x-scss”的非 JavaScript、CSS MIME 类型响应
- python - 使用 Numpy 在 Python 中进行混淆矩阵练习
- ios - 接收音乐文件到应用程序 - 需要在 Airdrop 菜单中显示我的应用程序才能接收文件
- c# - 来自浏览器的 C# AWS Lambda API Gateway - 参数不起作用
- go - golang 使用 bufio.NewScanner 读取大量数据