[英]Java: combine two map keys if the values are matching using streams
我有两张地图
地图 1: {123, "aaa"}, {234, "bbb"}
地图 2:{345,“ccc”},{456,“aaa”}
使用流,我想浏览这些地图并返回 {123, 456}
我试过类似的东西
map1.entrySet().stream()
.filter(node ->
map2.entrySet().stream().anyMatch(
newNode -> node.getValue().equals(newNode.getValue()))
.collect(...);
但这仅给了我第一张地图的列表。 有任何想法吗?
放弃在流中很容易完成的事情的想法,只需迭代即可。
基本上 - 如果您有匹配项,则需要添加两个键。 使用collect
运算符,您正在执行一项离散操作,并且您确实想要执行多项操作。
所以......只是迭代。
public static <K, V> Collection<K> findKeysOfEqualValues(Map<K, V> map1, Map<K, V> map2) {
Set<K> keyList = new LinkedHashSet<>();
for(Map.Entry<K, V> mapEntry1 : map1.entrySet()) {
for(Map.Entry<K, V> mapEntry2 : map2.entrySet()) {
if(Objects.equals(mapEntry1.getValue(), mapEntry2.getValue())) {
keyList.add(mapEntry1.getKey());
keyList.add(mapEntry2.getKey());
}
}
}
return keyList;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.