给定以下两个具有不同类型但键类型相同的值的映射

Map<Key, Dog> indexedDogs =  Maps.uniqueIndex(dogs, keyGeneratorForDog);
Map<Key, Cat> indexedCats=  Maps.uniqueIndex(cats, keyGeneratorForCat);


我想基于相同的键将值配对在一起:

Map<Dog, Cat> pairs = pair(indexedDogs, indexedCats);


在Guava中是否有pair()方法的实现或可以在现有Guava方法之上轻松构建的方法?

最佳答案

您可以编写自己的方法,这并不困难。首先,您需要获取这些地图中键的Set交集。为此,可以使用Set#retainAll()方法。

然后遍历集合,并按照以下方式将两个映射的值添加到每个键的新映射中:

public Map<Dog, Cat> pair(Map<Key, Dog> indexedDogs, Map<Key, Cat> indexedCats) {
    Set<Key> commonKey = indexedDogs.keySet();
    commonKey.retainAll(indexedCats.keySet());

    Map<Dog, Cat> map = new HashMap<>();

    for (Key key: commonKey) {
        map.put(indexedDogs.get(key), indexedCats.get(key));
    }

    return map;
}

09-30 15:34
查看更多