2011-10-22 67 views
1

我正在顯示按鍵排序的TreeMap,通過使用Map.entrySet()。但是,我想要顯示按值和鍵排序的內容。這可能嗎?如果是這樣,我會怎麼做?按值和鍵顯示樹形圖

編輯:改寫:

我目前顯示通過關鍵字排序樹圖。我想顯示它最初按值排序,但如果值是相同的,我希望鍵以升序顯示。

回答

1

使用一個比較器來排序條目對象在您的地圖。

public class MyComparator implements Comparator<Entry<String, String>> { 
    @Override 
    public int compare(Entry<String, String> left, Entry<String, String> right) { 
     int valueComp = left.getValue().compareTo(right.getValue()); 
     if (valueComp != 0) 
      return valueComp; 
     int keyComp = left.getKey().compareTo(right.getKey()); 
     return keyComp; 
    } 
} 

@Test 
public void testSorting() throws Exception { 
    Map<String, String> tree = new TreeMap<String, String>(); 
    tree.put("D", "A"); 
    tree.put("A", "A"); 
    tree.put("F", "C"); 
    tree.put("E", "B"); 
    tree.put("C", "A"); 
    tree.put("B", "B"); 
    Set<Entry<String, String>> entrySet = tree.entrySet(); 
    Comparator<? super Entry<String, String>> comparator = new MyComparator(); 
    TreeSet<Entry<String, String>> sorted = new TreeSet<Entry<String, String>>(comparator); 
    sorted.addAll(entrySet); 
    for (Entry<String, String> entry : sorted) { 
     System.out.println(entry); 
    } 
} 

結果:

A=A 
C=A 
D=A 
B=B 
E=B 
F=C 
2

我不知道你想要達到的目標 - TreeMap中的鍵是唯一的,因此如果按鍵對內容排序,按值排序是沒有意義的。如果你想有兩個列表,一個按鍵排序,另一個按值排序,則可以使用兩個TreeMaps或使用特殊容器,如Bimap

+0

我所要的輸出可以在樹形圖的值排序,但價值並不都是獨一無二的,所以當值相同,則它們共享相同的價值觀鍵將被排序。 – user650309

+0

然後,您可以只讀取鍵值對(Map.Entry對象),將它們存儲在ArrayList中,並使用僅比較值的自定義比較器對其進行排序。 –