zoukankan      html  css  js  c++  java
  • 根据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

  • 相关阅读:
    JAVA反射机制
    Android插件化
    MFC项目的建立
    [ACM]躲猫猫
    [ACM]某一天的n天后是几年几月几日
    [ACM]括号配对问题
    开发中好用的网站
    TCP与UDP(实时通讯)
    NSSet基本使用
    NSPredicate(正则表达式)
  • 原文地址:https://www.cnblogs.com/klaus-guan/p/4082257.html
Copyright © 2011-2022 走看看