首页 > 代码库 > 根据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来进行排序