package corejava;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class 根据value对map排序 {
public static void main(String[] args) {
//构建测试数据
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("g", 7);
map.put("a", 6);
map.put("b", 5);
map.put("c", 4);
map.put("d", 3);
map.put("f", 1);
map.put("e", 2);
//对map进行排序, 按照value升序排序
map = sortMapByValue(map);
//测试代码
// Set<Entry<String,Integer>> set = map.entrySet();
//
// for (Entry<String, Integer> entry : set) {
// System.out.println(entry.getKey()+":"+entry.getValue());
// }
}
/**
* 对map进行排序, 按照value升序排序
* @param map
* @return
*/
public static Map<String,Integer> sortMapByValue(Map<String,Integer> map){
//将Map集合转变为一个List集合,目的是为了调用Collections.sort方法来为List排序.
//list里装的对象是一个Entry, 即map的键值对.
Set<Entry<String,Integer>> set = map.entrySet();
List<Entry<String,Integer>> list = new ArrayList<Entry<String,Integer>>(set);
//sort的重载方法, 通过实现Comparator接口来为List集合里的entry元素进行排序,按照entry的value进行升序排序
Collections.sort(list, new Comparator<Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1,Entry<String, Integer> o2) {
return o1.getValue() - o2.getValue();
}
});
//创建一个LinkedHashMap, 目的是为了返回一个有序的Map, 且顺序是按照元素放入Map时的顺序
Map<String,Integer> resultMap = new LinkedHashMap<String,Integer>();
for (Entry<String, Integer> e : list) {
resultMap.put(e.getKey(), e.getValue());
}
return resultMap;
}
}
思路:
1. 将Map转变为可以排序的List
2. 使用Collections.sort的重载方法, 实现Compactor接口来实现自定义排序, 排序方式是按照Map的value升序排序.
3. 返回一个有序的map
原文:http://www.cnblogs.com/klaus-guan/p/4082257.html