繁体   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