web-dev-qa-db-fra.com

Intersection de Java.util.Map

Existe-t-il une méthode dans Java.util.Map ou toute utilité pour effectuer une intersection sur deux cartes? (Pour croiser deux cartes par les "clés")

Je n'en trouve pas. Je peux toujours implémenter ma propre logique d'intersection, mais j'espérais qu'il y avait déjà une opération dans l'un des Java.util.* classes qui feraient cela.

37
mandy

Que diriez-vous:

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

ou:

Map map1 = ...;
Map map2 = ...;
Set result = new ...(map1.keySet());
result.retainAll(map2.keySet());
48
Martin Ellis

Si vous utilisez Guava, vous pouvez utiliser Maps.difference pour obtenir un objet MapDifference , à partir duquel vous pouvez extraire la fonction entriesInCommon() et entriesDiffering() comme cartes. (Divulgation: je contribue à la goyave.)

14
Louis Wasserman

La goyave Sets.intersection(Set, Set) devrait faire le travail, avec le keySet de chaque carte transmis en tant que paramètres.

4
darrengorman

Pour tester l'intersection, vous pouvez utiliser l'opération containsAll (). Qui 'Renvoie vrai si cet ensemble contient tous les éléments de la collection spécifiée. Si la collection spécifiée est également un ensemble, cette méthode retourne true s'il s'agit d'un sous-ensemble de cet ensemble. '

Pour obtenir une collection de ces éléments qui se croisent, vous pouvez utiliser à la place l'opération retenueAll ().

Ces méthodes se trouvent toutes les deux ici

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

0
calderonmluis

Je recommanderais Apache c ollectionUtils # intersection

Procédez comme suit:

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

Faites une boucle sur les clés d'une carte, voyez si elles sont dans la deuxième carte:

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