3 回答

TA貢獻1836條經驗 獲得超3個贊
注意:您的預期和實際輸出與您添加到Map.
您的代碼不起作用的原因是因為您Stream#sorted使用兩個單獨的 s 調用了兩次Comparator,所以在您的情況下,第一次調用Stream#sorted是無用的(因為它被第二次調用覆蓋了)。
Comparator通過將自定義傳遞給以下內容,我能夠實現您的預期輸出Stream#sorted:
Map.Entry.<Integer, String>comparingByValue()
.thenComparing(Map.Entry.comparingByKey())
輸出:
6=Malmo
26=Malmo
14=Orebro
110=Orebro
146=Sweden
148=Sweden

TA貢獻2039條經驗 獲得超8個贊
有時我回答了如何在 java 中對名稱和年齡進行排序,除了用于存儲的數據結構之外,與您的問題有許多相似之處。遍歷每個鍵并對其進行排序,然后再次按值進行排序,然后再排序是非常乏味的,并且會讓您感到非常困惑。只記得你以前不使用Stream時在 Map 中的遍歷方式:
for (Map.Entry<String,String> entry : somemap.entrySet()){..Some Statements..};
studentMaster.entrySet().stream()
.sorted(Comparator.comparing((Map.Entry<Integer, String> m) -> m.getValue())
.thenComparing(Map.Entry::getKey)).forEach(System.out::println);
輸出
6=Malmo
26=Malmo
14=Orebro
110=Orebro
146=Sweden
148=Sweden

TA貢獻1869條經驗 獲得超4個贊
Comparator應該是這樣的:
Comparator<Entry<Integer, String>> comparator = (o1, o2) -> {
int i = o1.getValue().compareTo(o2.getValue());
if (i == 0) {
return o1.getKey().compareTo(o2.getKey());
} else {
return i;
}
};
然后將其傳遞給Stream#sorted方法: studentMaster.entrySet().stream().sorted(comparator).forEach(System.out::println);
輸出:
6=Malmo
26=Malmo
14=Orebro
110=Orebro
146=Sweden
148=Sweden
添加回答
舉報