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

你可能感兴趣的:(value)