簡體   English   中英

Java:如果值使用流匹配,則組合兩個映射鍵

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM