给定以下两个具有不同类型但键类型相同的值的映射
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;
}