Intersection de java.util.Cartographie


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

Je ne suis pas en mesure d'en trouver. Je peux toujours implémenter ma propre logique d'intersection, mais j'espérais qu'il y ait déjà une opération dans l'une des classes java.util.* qui le ferait.

Author: mandy, 2012-11-01

6 answers

Que diriez-vous de:

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());
 41
Author: Martin Ellis, 2012-11-01 16:18:30

Si vous utilisez la Goyave, vous pouvez utiliser Maps.difference pour obtenir un MapDifference objet, à partir de laquelle vous pouvez extraire le entriesInCommon() et entriesDiffering(), comme des cartes. (Divulgation: Je contribue à la goyave.)

 13
Author: Louis Wasserman, 2018-02-08 11:43:09

Goyave est Sets.intersection(Set, Set) devrait faire le travail, avec le jeu de clés de chaque Carte passés en paramètres.

 3
Author: darrengorman, 2012-11-01 15:43:17

Je recommanderais apache collectionUtils#intersection

Procédez comme suit:

 Collection intersection=    
      CollectionUtils.intersection(map1.keySet(),map2.keySet());
 0
Author: Woot4Moo, 2012-11-01 15:46:03

Boucle sur les clés d'une carte, voir si elles sont dans la deuxième carte:

private Map getIntersection(Map mapOne, Map mapTwo)
{
    Set intersection = new HashMap();
    for (Object key: mapOne.keySet())
    {
        if (mapTwo.containsKey(key))
           intersection.put(key, mapOne.get(key));
    }
    return intersection;
}
 0
Author: dashrb, 2012-11-01 15:49:40

Pour tester l'intersection, vous pouvez utiliser l'opération containsAll (). Qui " Retourne true si cet ensemble contient tous les éléments de la collection spécifiée. Si la collection est aussi un ensemble, cette méthode renvoie true si c'est un sous-ensemble de cet ensemble.'

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

Ces méthodes sont toutes deux trouvées ici

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

 0
Author: calderonmluis, 2012-11-01 15:54:25