java - 从多个地图中获取重复地图键的列表
问题描述
我有多个数组映射。
Map<String, List<String>> map1 = new HashMap<>();
Map<String, List<String>> map2 = new HashMap<>();
Map<String, List<String>> map3 = new HashMap<>();
Map<String, List<String>> map4 = new HashMap<>();
我想从多个地图中获取重复地图键的列表。
例如
map1.put("k0", Arrays.asList("a0", "a1"));
map1.put("k1", Arrays.asList("b0", "b1"));
map2.put("k1", Arrays.asList("z1", "z2"));
map2.put("k2", Arrays.asList("z1", "z2"));
map3.put("k1", Arrays.asList("z1", "z2"));
map3.put("k3", Arrays.asList("z1", "z2"));
map4.put("k3", Arrays.asList("z1", "z2"));
map4.put("k4", Arrays.asList("z1", "z2"));
map5.put("k0", Arrays.asList("z1", "z2"));
map5.put("k5", Arrays.asList("z1", "z2"));
// Expected output is
List: [k0, k1, k3]
除了遍历所有映射键,检查集合是否包含键,如果不将键添加到集合中,我想不出任何更简洁的方法来做到这一点。有没有办法用流来完成这个?
解决方案
因为您使用的是 java-stream 标签,所以您可以像这样解决您的问题:
Set<String> duplicateKeys = Stream.of(map1.keySet(), map2.keySet(), map3.keySet(), map4.keySet(), map5.keySet())
.flatMap(Set::stream)
.collect(Collectors.toMap(Function.identity(), x -> false, (a, b) -> true))
.entrySet().stream()
.filter(Map.Entry::getValue)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
输出
[k0, k1, k3]
.collect(Collectors.toMap(Function.identity(), x -> false, (a, b) -> true))
这返回一个Map<String, Boolean>
它返回键,true
如果重复,false
如果不是,那么您只需过滤以仅获取值为 true 的条目,这些条目.filter(Map.Entry::getValue)
表示重复的条目。
推荐阅读
- python - 在 numpy 中向特定维度添加额外的通道
- javascript - 打字稿中T = {}的含义是什么
- python - 计算 Numpy 数组的随机性
- ruby-on-rails - 当用户销毁会话时设计不重定向
- javascript - 当我不需要它时,如何避免将电子安装为依赖项?
- java - 当从 Play 商店安装应用程序时,firebase 手机身份验证不会发送短信,但是当它(同一个应用程序)从 android studio 安装时工作正常
- reactjs - 我想在动画结束时改变描边的颜色
- docker - server_name 未解析到 NGINX 配置中的指定端口
- javascript - 根据分配给用户角色的属性隐藏/显示元素
- php - 从下拉菜单中获取所选项目