web-dev-qa-db-ja.com

Java.util.Mapの共通部分

2つのマップで交差を実行するためのJava.util.Mapまたはutilのメソッドはありますか? (2つのマップを「キー」で交差させるには)

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

37
mandy

どうですか:

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());
48
Martin Ellis

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

14
Louis Wasserman

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

4
darrengorman

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

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

これらの方法はどちらもここにあります

http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/Set.html

0
calderonmluis

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

以下をせよ:

 Collection intersection=    
      CollectionUtils.intersection(map1.keySet(),map2.keySet());
0
Woot4Moo

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;
}
0
dashrb