這篇博客是對Java Map對value值實現排序
首先說一下如果Map對key進行從小到大默認排序是創建TreeMap對象。Map<Integer,Integer> maps = new TreeMap<>();就行了。
那么如何實現按value排序呢?
這里使用的是java.util.Collections類實現排序,將Map轉成List,再自定義比較器,代碼如下:
package day01_jichu;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class MapValSort {
public static void main(String[] args) {
Map<String, Integer> maps = new TreeMap<String, Integer>();
maps.put("zhangsan", 22);
maps.put("lisi", 24);
maps.put("wangwu", 18);
maps.put("zhaoliu", 22);
//自定義比較器
Comparator<Map.Entry<String, Integer>> valCmp = new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return o2.getValue()-o1.getValue(); // 降序排序,如果想升序就反過來
}
};
//將map轉成List,map的一組key,value對應list一個存儲空間
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(maps.entrySet()); //傳入maps實體
Collections.sort(list,valCmp); // 注意此處Collections 是java.util包下面的,傳入List和自定義的valCmp比較器
//輸出map
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).getKey() + " = " + list.get(i).getValue());
}
}
}
下面是輸出結果

