2016-06-23 5 views
1

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?

+1

'Map' bildet einen Schlüssel zu einem Wert - was tun Sie das Set erwarten genau enthalten,? – CptBartender

+1

Sind "gemeinsame Elemente" gemeinsame Schlüssel, Werte oder Schlüssel/Wert-Paare? –

+1

Sie können Java Map nicht in Java Set konvertieren. – sauumum

Antwort

3

Je nachdem, was Sie zu extrahieren erwarten, können Sie einen Blick auf eines dieser drei Methoden (Java 7) nehmen:

  1. Map.entrySet() - wenn Sie auf beiden Schlüssel und Wert vergleichen wollen
  2. Map.keySet() - wenn Schlüssel genug für Sie ist
  3. Map.values() - wenn Sie nur an Werten interessiert sind; Beachten Sie, dass dies eine Collection, nicht eine Set zurückgibt, aber das sollte einfacher zu konvertieren sein.
0

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:

  1. Sets up von Testcode
  2. zwei Arbeitslinien, die Kreuzung durchzuführen, plus ein for-Schleife, die gemeinsamen Einträge neu zuordnen.
  3. 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()); 
        } 
    }