根据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

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