码迷,mamicode.com
首页 > 编程语言 > 详细

根据Map的value来进行排序

时间:2014-11-07 20:48:35      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   使用   java   for   数据   div   on   

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来进行排序

标签:blog   io   ar   使用   java   for   数据   div   on   

原文地址:http://www.cnblogs.com/klaus-guan/p/4082257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!