Map
s von Natur aus unsortiert sind. Die Tatsache, dass die erste Karte sortiert ist, ist nur Zufall. Z.B.
Map<String, Integer> map1 = new HashMap<>();
map1.put("Four", 4);
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
map1.put("Six", 6);
führt in
map1={Six=6, Four=4, One=1245598, two=0, three=1}
Um eine sortierte Karte zu erhalten, benötigen Sie eine spezielle Kartentyp verwenden, wie TreeMap
. Sie können einen Vergleicher für TreeMap
angeben, mit dem Sie die zweite Map
basierend auf den Werten der ersten Karte sortieren können.
Map<String, Integer> map1 = new TreeMap<>();
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
Map<String,Boolean> map2 = new TreeMap<>(Comparator.comparing(map1::get).reversed());
map2.put("One",true);
map2.put("two", false);
map2.put("three", true);
System.out.println("map1="+map1);
System.out.println("map2="+map2);
Ausgang:
map1={One=1245598, three=1, two=0}
map2={One=true, three=true, two=false}
ist jedoch zu beachten, dass die Aktualisierungen der ersten Karte kann die zweite brechen.
Comparator.comparing(map1::get).reversed()
ist nur ein kurzer Weg einen Komparator in Java 8 zu erzeugen:
Comparator.comparing(func)
Erstellt eine Comparator
, dass 2-Objekte vergleicht, indem die Ergebnisse des Vergleichens func
auf die Objekte der Anwendung, dh der Der von der compare(o1, o2)
-Methode dieser Comparator
zurückgegebene Wert ist
func.apply(o1).compareTo(func.apply(o2))
map1::get
ist eine Methodenreferenz auf die get
Methode von map1
. Bei einem Wert o1
wird map1.get(o1)
zurückgegeben. diese 2 Fakten Die Kombination der Rückgabetyp des daher erstellt Komparator ist
map1.get(o1).compareTo(map1.get(o2))
comparator.reversed()
nur Comparator
für die umgekehrte Reihenfolge wieder für Ordnung statt aufsteigend Sortierung absteigend.
Wie haben Sie eine 'HashMap' sortiert? Sie sind ungeordnet, das macht keinen Sinn.Was war deine Sortierreihenfolge für map1? Wie ist 'Eins',' Drei', 'Zwei'" absteigend "? Sie sehen mir eher ungeordnet aus. – Andreas
Was bedeutet "meine zweite Karte basierend auf der ersten Karte" basierend auf Schlüsseln, Werten oder etwas anderem? – ead