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.
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());
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.)
La goyave Sets.intersection(Set, Set)
devrait faire le travail, avec le keySet de chaque carte transmis en tant que paramètres.
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
Je recommanderais Apache c ollectionUtils # intersection
Procédez comme suit:
Collection intersection=
CollectionUtils.intersection(map1.keySet(),map2.keySet());
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;
}