首页 > 代码库 > 根据Map的value来进行排序
根据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
根据Map的value来进行排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。