Java 基于同一密钥对来自两个映射的值进行配对
给定以下两个具有不同类型但键类型相同的值的映射Java 基于同一密钥对来自两个映射的值进行配对,java,guava,Java,Guava,给定以下两个具有不同类型但键类型相同的值的映射 Map<Key, Dog> indexedDogs = Maps.uniqueIndex(dogs, keyGeneratorForDog); Map<Key, Cat> indexedCats= Maps.uniqueIndex(cats, keyGeneratorForCat); Map indexedogs=Maps.uniqueIndex(dogs,keyGeneratorForDog); Map indexe
Map<Key, Dog> indexedDogs = Maps.uniqueIndex(dogs, keyGeneratorForDog);
Map<Key, Cat> indexedCats= Maps.uniqueIndex(cats, keyGeneratorForCat);
Map indexedogs=Maps.uniqueIndex(dogs,keyGeneratorForDog);
Map indexedCats=Maps.uniqueIndex(cats,keyGeneratorForCat);
我希望基于相同的键将值配对在一起:
Map<Dog, Cat> pairs = pair(indexedDogs, indexedCats);
Map pairs=pair(indexedtogs,indexedCats);
在番石榴中是否有
pair()
方法的实现,或者可以在现有番石榴方法的基础上轻松构建的方法?您可以编写自己的方法,这并不难。首先,需要获得这些贴图中关键点的集合交点。你可以用这种方法
然后在集合上迭代,并将两个映射中的值添加到每个键的新映射中,以某种方式沿以下行进行:
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;
}
公共映射对(映射索引目录、映射索引目录){
Set commonKey=indexedDogs.keySet();
commonKey.retainal(indexedCats.keySet());
Map Map=newhashmap();
for(键:commonKey){
map.put(indexedtogs.get(key)、indexedCats.get(key));
}
返回图;
}
如果两个键映射到同一个Dog实例,但映射到不同的Cat实例,该怎么办?不能将这两个键的狗实例作为新地图中的键。因此,是否要为每对键生成一个地图实例?如果是这样的话,那么应该很简单。映射。uniqueIndex
保证每个键实例有一个狗(否则会引发异常),keyGeneratorForDog保证每个狗有一个键。为什么有人将此标记为主题外的问题?保留不会影响索引映射吗?您可以从keySet()中删除一些键。键集的HashMap实现执行公共布尔删除(对象o){返回HashMap。this.removeEntryWorkey(o)!=null;}
@dzieciou是的,它也会修改映射。在这种情况下,您可以创建密钥集的副本。