Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于同一密钥对来自两个映射的值进行配对_Java_Guava - Fatal编程技术网

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是的,它也会修改映射。在这种情况下,您可以创建密钥集的副本。