0

次の 2 つのマップの値が異なる型であるが、キーの型が同じであるとします。

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 交差を取得する必要があります。そのための使用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 に答える