2017-08-05 4 views
-2

Wie korrekt den Comparator für die Treemap zu implementieren? Es sollte: 1. Sortieren Wörter nach der Länge der Zeile in absteigender Reihenfolge. 2. Wörter gleicher Länge alphabetisch sortieren.Komparator für Treemap

class Test implements Comparator<String> { 

    public static SortedMap<String, String> doSort(String str) { 
     Comparator<String> comparator = new Test(); 
     SortedMap<String, String> map = new TreeMap<>(comparator); 

     //do something to input String 

     return map; 
    } 


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

ist das genug? Wie fügt man die alphabetische Sortierung in der zweiten Runde hinzu?

+1

Mögliche Duplikat von [Wie vergleichen Objekte nach mehreren Feldern] (https://stackoverflow.com/questions/369512/how-to-compare-objects-by-multiple-fields) –

+0

Ich brauche nicht mehrere Felder. Ich brauche 2 Sortiermethoden: 1.Länge. 2.Alphabet. – naut92

Antwort

0

Sie Angenommen, verwenden Java 8+, könnte man dies mit einem Lambda schreiben wie

Comparator<String> comparator = (a,b) -> { 
    int r = Integer.compare(a.length(), b.length()); 
    if (r != 0) { 
     return r; 
    } 
    return a.compareTo(b); 
}; 

In Java 7 und früher, könnte es tun

Comparator<String> comparator = new Comparator<String>() { 
    public int compare(String a, String b) { 
     int r = Integer.compare(a.length(), b.length()); 
     if (r != 0) { 
      return r; 
     } 
     return a.compareTo(b); 
    } 
}; 
+0

Sorry, ich sehe nicht 2 Sortierung, nur 1: die Länge des Wortes. Ich brauche zwei: 1. Die Länge des Wortes. 2.Alphabet. Oder bedeutet es, dass Treemap selbst die Länge der Vergleichszeichenfolge sortiert? Leider funktioniert es in meinem Fall nicht. – naut92

+0

Die 'return a.compareTo (b);' wenn 'r == 0 'alphabetisch vergleicht. Das ist genau das, wonach du gefragt hast. –