2つのマップで交差を実行するためのJava.util.Map
またはutilのメソッドはありますか? (2つのマップを「キー」で交差させるには)
何も見つかりません。私はいつでも独自の交差ロジックを実装できますが、これを実行するJava.util.*
クラスの1つにすでに何らかの操作があることを望んでいました。
どうですか:
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());
Guavaを使用している場合は、 _Maps.difference
_ を使用して MapDifference
オブジェクトを取得し、そこからentriesInCommon()
およびentriesDiffering()
をマップとして。 (開示:私はグアバに貢献します。)
Guavaの Sets.intersection(Set, Set)
は、各マップのkeySetをパラメーターとして渡して、この作業を行う必要があります。
交差をテストするには、containsAll()オペレーションを使用できます。これは、このセットに指定されたコレクションのすべての要素が含まれている場合にtrueを返します。指定されたコレクションがセットでもある場合、このメソッドは、セットのサブセットであればtrueを返します。
これらの交差する要素のコレクションを取得するには、代わりに、retainAll()操作を使用できます。
これらの方法はどちらもここにあります
http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/Set.html
Apache c ollectionUtils#intersection をお勧めします
以下をせよ:
Collection intersection=
CollectionUtils.intersection(map1.keySet(),map2.keySet());
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;
}