根据相同的键对两个映射中的值进行配对

时间:2013-09-17 19:46:31

标签: java guava

给出以下两个具有不同类型但相同键类型的值的地图

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

1 个答案:

答案 0 :(得分:2)

你可以编写自己的方法,这不会那么困难。首先,您需要在这些地图中获取密钥的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; 
}