2017-08-05 60 views
-2

如何正確實現樹形圖比較器? 它應該: 1.按行的長度以降序排列單詞。 2.等長字按字母順序排序。樹形圖比較器

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(); 
    } 
} 

就夠了嗎? 如何在第二回閤中添加字母排序?

+1

的可能的複製[如何比較對象由多個字段](https://stackoverflow.com/questions/369512/how-to-compare-objects-by-multiple-fields) –

+0

我不需要幾個字段。我需要2種排序方法:1.長度。 2.Alphabet。 – naut92

回答

0

假設你使用的是Java 8+,你可以用一個lambda如

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

在Java 7和早期寫這篇文章,它可能會做

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

非常抱歉,我沒有看到2排序,只有1:單詞的長度。我需要兩個:1.單詞的長度。 2.Alphabet。 或者是否意味着Treemap自己對比較字符串的長度進行排序?不幸的是,在我的情況下,它不起作用。 – naut92

+0

'返回a.compareTo(b);'當'r == 0'按字母順序進行比較。這正是你所要求的。 –