[英]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.