我正在顯示按鍵排序的TreeMap,通過使用Map.entrySet()。但是,我想要顯示按值和鍵排序的內容。這可能嗎?如果是這樣,我會怎麼做?按值和鍵顯示樹形圖
編輯:改寫:
我目前顯示通過關鍵字排序樹圖。我想顯示它最初按值排序,但如果值是相同的,我希望鍵以升序顯示。
我正在顯示按鍵排序的TreeMap,通過使用Map.entrySet()。但是,我想要顯示按值和鍵排序的內容。這可能嗎?如果是這樣,我會怎麼做?按值和鍵顯示樹形圖
編輯:改寫:
我目前顯示通過關鍵字排序樹圖。我想顯示它最初按值排序,但如果值是相同的,我希望鍵以升序顯示。
使用一個比較器來排序條目對象在您的地圖。
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
我不知道你想要達到的目標 - TreeMap中的鍵是唯一的,因此如果按鍵對內容排序,按值排序是沒有意義的。如果你想有兩個列表,一個按鍵排序,另一個按值排序,則可以使用兩個TreeMaps或使用特殊容器,如Bimap。
我所要的輸出可以在樹形圖的值排序,但價值並不都是獨一無二的,所以當值相同,則它們共享相同的價值觀鍵將被排序。 – user650309
然後,您可以只讀取鍵值對(Map.Entry對象),將它們存儲在ArrayList中,並使用僅比較值的自定義比較器對其進行排序。 –