根据Map的value对key进行排序的一种方法尝试(Java)

 前言:之前每次需要对HashMap的key进行排序,往往是将value全部取出存入一个数组,先进行一次对value的排序;然后再进行从map中按照排序好的value取出key。若还需要对value相同的key进行排序,就需要一个中间list存入value相同的key,按照key的“其他规则”排好之后,再向最终的结果数组中存。这种方法需要写大量的代码,工作量较大。于是,尝试通过比较器来实现对Map的key进行排序的方法。

本博文程序使用的方法:

  1. 定义比较器,实现Comparator接口(为了map元素的可见性,此处定义为了内部类);
  2. 将map对象的key全部取出,存入一个数组中。String[] keyArr = map.keySet().toArray(new String[map.size()]);
  3. 使用Arrays中的sort方法对key值对应的数组进行排序(使用步骤1中定义的比较器)。Arrays.sort(keyArr, new ComparatorMap().new ComparMap());   此处,为内部类的调用。
import java.util.*;

public class ComparatorMap {
	static Map<String, Integer> map = new HashMap<>();
	static {
		map.put("a", 3);
		map.put("b", 3);
		map.put("c", 8);
		map.put("d", 2);
		map.put("f", 2);
		map.put("g", 2);
		map.put("e", 2);
	}
	
	public static String[] sortMapKey(Map<String, Integer> map) {
		// 提取map的key
		String[] keyArr = map.keySet().toArray(new String[map.size()]);
		// 根据自定义的比较器进行排序
		Arrays.sort(keyArr, new ComparatorMap().new ComparMap());
		return keyArr;
	}
	
	public static void main(String[] args) {
		System.out.println(Arrays.toString(sortMapKey(map)));
	}
	
	
	/**
	 * 定义一个内部类(为了能够访问map数据),用作比较器
	 */
	class ComparMap implements Comparator<String> {
		// 覆写比价方法
		@Override
		public int compare(String o1, String o2) {
			if(map.get(o1)>map.get(o2)) {  // 首先按照key对应的value值进行比较;
				return 1;
			}else if(map.get(o1)<map.get(o2)) {
				return -1;
			}else {
				return o1.compareTo(o2);  // 如果key的value相同,按照key的字典序排序
			}
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值