2016-07-20 13 views
-4

Ich habe zwei HashMaps:Wie zwei HashMaps mit gleichen Schlüssel sortieren, aber unterschiedliche Werte

Map<String,Integer> map1 = {"One"= 1245598 , "two" = 0 ,"three" =1}; 
Map<String,Boolean> map2 = {"One" =true , "two" =false ,"three" = true}; 

wo „eins“, „zwei“ Attribute sind.

Ich habe die erste Karte leicht sortiert, die map<String,Integer> ist. Aber wie kann ich meine zweite Karte sortieren basierend auf der ersten Karte, so dass die Sortiermethode wird mir eine Karte zurück, die aussehen wird:

map2= {"One" =true , "three" = true ,"two" = false}; 

das heißt, in absteigender Reihenfolge.

+0

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

+0

Was bedeutet "meine zweite Karte basierend auf der ersten Karte" basierend auf Schlüsseln, Werten oder etwas anderem? – ead

Antwort

0

Verwenden Sie anstelle von HashMap eine TreeMap. Das wird deine Karten sortieren.

können Sie diese Links verweisen: LINK 1 oder link 2

Map<String, Integer> treeMap1 = new TreeMap<String, Integer>(
      new Comparator<String>() { 

      @Override 
      public int compare(String o1, String o2) { 
       return o2.compareTo(o1); 
      } 

     }); 
     treeMap1.putAll(map1); 

In ähnlicher Weise eine zweite TreeMap erstellen mit <String, Boolean>

+0

Lassen Sie mich wissen, wenn Sie irgendwelche Zweifel haben –

+0

Sie sagen, um die Karte unabhängig voneinander zu sortieren.Aber wie kann ich Boolean Karte basierend auf Karte der Ganzzahl sortieren Karte sortieren.Ich verstehe nicht klar. –

+0

Treemap hier wird die Karte nach den Schlüsseln sortieren. Da beide Karten den gleichen Schlüsselsatz haben, ist ihre sortierte Reihenfolge gleich. Sie müssen map2 nicht wie in map1 sortieren, sondern müssen beide Karten in der gleichen Reihenfolge sortieren. Dies wird durch tremap komparator gemacht. –

1

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.

+0

wie du vergleichst (map :: get) .Kannst du es richtig erklären –

+0

@SukirtiShukla: Erklärung hinzugefügt. Wenn Sie mit den Methodenverweisen nicht vertraut sind, sollten Sie das Orakel-Lernprogramm über sie lesen: https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html – fabian