Intersezione di java.util.Map

Esiste un metodo in java.util.Map o qualsiasi altro strumento per eseguire un’intersezione su due mappe? (Per intersecare due mappe con le “chiavi”)

Non sono in grado di trovarne. Posso sempre implementare la mia logica di intersezione, ma speravo che ci fosse già qualche operazione in una delle classi java.util.* che farebbe questo.

Che ne dite di:

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

o:

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

Se stai usando Guava, puoi utilizzare Maps.difference per ottenere un object MapDifference , dal quale puoi estrarre le entriesInCommon() e entriesDiffering() come mappe. (Divulgazione: contribuisco a Guava.)

Guava’s Sets.intersection(Set, Set) dovrebbe fare il lavoro, con il set di chiavi di ogni mappa passati come parametri.

Suggerirei l’ incrocio di apache c ollectionUtils #

Fare quanto segue:

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

Passa in rassegna le chiavi di una mappa, vedi se sono nella seconda mappa:

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

Per testare l’intersezione è ansible utilizzare l’operazione containsAll (). Quale ‘Restituisce vero se questo insieme contiene tutti gli elementi della collezione specificata. Se la raccolta specificata è anche un insieme, questo metodo restituisce true se è un sottoinsieme di questo insieme. ‘

Per ottenere una raccolta di questi elementi intersecanti, puoi invece utilizzare l’operazione retainAll ().

Questi metodi sono entrambi trovati qui

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