Ich möchte eine HashMap in ein Set konvertieren. Ich versuche, gemeinsame Elemente zwischen zwei Maps zu finden, indem ich das zuerst auf ein Set setze und retainAll verwende. So konvertieren Sie eine Map in ein SetWie konvertiert man eine Map in Java und fügt alle Elemente der Map hinzu?
Antwort
Vielleicht, was Sie brauchen, ist nur https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#entrySet-- oder https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#keySet--
Wie Sie sehen können, rufen map.values()
oder map.keySet()
gibt eine Gruppe alle Werte oder Schlüssel enthält.
Je nachdem, was Sie zu extrahieren erwarten, können Sie einen Blick auf eines dieser drei Methoden (Java 7) nehmen:
- Map.entrySet() - wenn Sie auf beiden Schlüssel und Wert vergleichen wollen
- Map.keySet() - wenn Schlüssel genug für Sie ist
- Map.values() - wenn Sie nur an Werten interessiert sind; Beachten Sie, dass dies eine
Collection
, nicht eineSet
zurückgibt, aber das sollte einfacher zu konvertieren sein.
Um die Kreuzung von zwei Karten zu finden, mit java.util.Set.retainAll()
sinnvoll ist, aber der Satz eines endet mit einem Set<Map.Entry>
ist. Wenn Sie diese Einträge erneut verwenden möchten, müssen Sie sie neu zuordnen (wie im folgenden Beispiel gezeigt).
Im folgenden Beispiel erledigen zwei Zeilen die gesamte Arbeit. Es gibt drei Teile zum Beispiel:
- Sets up von Testcode
- zwei Arbeitslinien, die Kreuzung durchzuführen, plus ein for-Schleife, die gemeinsamen Einträge neu zuordnen.
Zeigen Sie die Ergebnisse.
public static void main(String[] args) { // **** Section 1: Setup **** // Create 3 maps; Two with duplicate values // and a third to hold the ultimate results Map<String, String> m2 = new HashMap<String, String>(); Map<String, String> m1 = new HashMap<String, String>(); Map<String, String> common = new HashMap<String, String>(); // Populate test map 1 m1.put("1", "One"); m1.put("2", "Two"); m1.put("2a", "Two"); // Create map 2 containing some of the same values in map 1 m2.put("I", "One"); m2.put("1", "One"); m2.put("II", "Two"); m2.put("2", "Two"); // **** Section 2: Perform the intersection **** // create a set to handle the intersection Set<Map.Entry<String,String>> dups = m1.entrySet(); dups.retainAll(m2.entrySet()); // Remap the results that were common to both maps for (Map.Entry<String, String> entry: dups) { common.put(entry.getKey(), entry.getValue()); } // **** Section 3: Show the results **** // show the resulting map of values found in both maps int ii = 0; for (Map.Entry<String, String> entry: dups) { System.out.println("Common member " + ++ii + "= " + entry.getKey() + ":" + entry.getValue()); } // show the original maps showMap(1, m1); showMap(2, m2); } static private void showMap(int mapNumber, Map<String,String> m) { int ii = 0; for (Map.Entry<String, String> entry: m.entrySet()) { System.out.println("Map " + mapNumber + " member " + ++ii + ": key = " + entry.getKey() + ": value = " + entry.getValue()); } }
'Map' bildet einen Schlüssel zu einem Wert - was tun Sie das Set erwarten genau enthalten,? – CptBartender
Sind "gemeinsame Elemente" gemeinsame Schlüssel, Werte oder Schlüssel/Wert-Paare? –
Sie können Java Map nicht in Java Set konvertieren. – sauumum