0

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

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 方法之上轻松构建的东西?

4

1 回答 1

2

您可以编写自己的方法,这并不难。首先,您需要获取这些映射中键的 Set 交集。Youc 的使用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; 
}
于 2013-09-17T19:55:06.587 回答