根据Map的value来进行排序
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。