Map Sort by Value
Sun, Mar 28, 2021
閱讀時間 1 分鐘
Map Sort by value
有鑑於 Bill 上上週在刷 LC 時 題目點我!
很簡單的排序問題,那時我的想法是先掃過一次,存 Map<String 字,Integer 字的長度> 然後在排序 Map Value 後 得到答案 但那時我心中想到的 map value 排序蠻麻煩的,這邊先記錄一下後來比較乾淨一點的寫法,以防之後忘記
// 掃第一次
Map<String,Integer> map = new HashMap<>();
for(String s: words){
map.put(s, map.getOrDefault(s, 0) + 1);
}
排序方法:
List<Map.Entry<String, Integer>> list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
這個跟上面的幾乎一樣,一個是 list 存 Map.Entry 在排序器中拿 Entry 出來比,另一個存 map key 然後每次都從 map 掃一次拿 value 出來比
List<String> list = new ArrayList<>(map.keySet());
Collections.sort(list,new Comparator<String>(){
public int compare(String s1, String s2){
int length = map.get(s2) - map.get(s1);
if(length != 0) return length;
return s1.compareTo(s2);
}
});
最後 lambda 寫法
List<String> list = new ArrayList<>(map.keySet());
Collections.sort(list, (s1, s2)-> {
return (map.get(s2) == map.get(s1)) ? s1.compareTo(s2) : (map.get(s2)- map.get(s1));
});