Подтвердить что ты не робот

Пересечение java.util.Map

Есть ли способ в java.util.Map или какой-либо утилите для выполнения пересечения на двух картах? (Чтобы пересечь две карты "ключами" )

Я не могу найти. Я всегда могу реализовать свою собственную логику пересечения, но я надеялся, что в одном из классов java.util.* будет выполняться некоторая операция.

4b9b3361

Ответ 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());

Ответ 2

Если вы используете Guava, вы можете использовать Maps.difference, чтобы получить MapDifference, из которого вы можете извлечь карты entriesInCommon() и entriesDiffering() в качестве карт. (Раскрытие информации: Я вношу свой вклад в Гуаву.)

Ответ 3

Guava Sets.intersection(Set, Set) должен выполнить задание, с помощью набора ключей каждой карты в качестве параметров.

Ответ 4

Чтобы проверить пересечение, вы можете использовать операцию containsAll(). Which 'Возвращает true, если этот набор содержит все элементы указанной коллекции. Если указанный набор также является набором, этот метод возвращает true, если он является подмножеством этого набора. '

Чтобы получить коллекцию этих пересекающихся элементов, вы можете использовать операцию keepAll().

Эти методы найдены здесь

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

Ответ 5

Я бы порекомендовал apache c ollectionUtils # intersection

Выполните следующие действия:

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

Ответ 6

Зациклите ключи одной карты, посмотрите, не находятся ли они на второй карте:

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