这个问题在这里已经有答案了:
确定列表中的重复项(31个答案)
java.util.set中的重复元素(5个答案)
Java8,寻找重复元素的流(14个答案)
java.util.map的交集(6个答案)
24天前关门。
我有多张阵列图。
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<>();
我想从多个Map中得到重复的Map键列表。
例如
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]
除了遍历所有的Map键,检查一个集合是否包含键,如果不将键添加到集合中,我想不出任何更干净的方法。有没有办法用流来实现这一点?
3条答案
按热度按时间yzuktlbb1#
因为您使用的是java流标记,所以可以这样解决您的问题:
输出
l5tcr1uw2#
或者,你可以试试这个。创建Map流,然后
flatMap
它将密钥流转换为密钥流,然后将密钥收集到Map
计算每个密钥有多少个,然后流式传输该入口集,Set<Map.Entry>
,按键的出现次数过滤,将其Map到键值并收集到列表。这应该可以与.parallel()
.6ljaweal3#
我将结果建模为一个集合而不是列表,因为不可能有重复的元素。