44

2つのマップで交差を実行する方法java.util.Mapまたはutilはありますか?(「キー」によって2つのマップを交差させるため)

何も見つかりません。私はいつでも独自の交差ロジックを実装できますが、これを実行するjava.util.*クラスの1つにすでに何らかの操作があることを望んでいました。

4

6 に答える 6

56

どうですか:

Map map1 = ...;
Map map2 = ...;
Map result = new ...(map1);
result.keySet().retainAll(map2.keySet());

また:

Map map1 = ...;
Map map2 = ...;
Set result = new ...(map1.keySet());
result.retainAll(map2.keySet());
于 2012-11-01T15:43:21.060 に答える
15

Guavaを使用している場合は、を使用Maps.differenceしてオブジェクトを取得できます。このオブジェクトから、およびをマップとしてMapDifference抽出できます。(開示:私はグアバに貢献します。)entriesInCommon()entriesDiffering()

于 2012-11-01T16:07:31.533 に答える
4

GuavaSets.intersection(Set, Set)は、各マップのkeySetをパラメーターとして渡して、この作業を実行する必要があります。

于 2012-11-01T15:43:17.387 に答える
0

交差をテストするには、containsAll()操作を使用できます。'このセットに指定されたコレクションのすべての要素が含まれている場合、trueを返します。指定されたコレクションもセットである場合、このセットのサブセットであれば、このメソッドはtrueを返します。

これらの交差する要素のコレクションを取得するには、代わりにretainAll()操作を使用できます。

これらの方法は両方ともここにあります

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

于 2012-11-01T15:43:10.443 に答える
0

apache c ollectionUtils#intersectionをお勧めします

以下をせよ:

 Collection intersection=    
      CollectionUtils.intersection(map1.keySet(),map2.keySet());
于 2012-11-01T15:46:03.120 に答える
0

1つのマップのキーをループして、それらが2番目のマップにあるかどうかを確認します。

private Map getIntersection(Map mapOne, Map mapTwo)
{
    Map intersection = new HashMap();
    for (Object key: mapOne.keySet())
    {
        if (mapTwo.containsKey(key))
           intersection.put(key, mapOne.get(key));
    }
    return intersection;
}
于 2012-11-01T15:49:40.347 に答える