ITPub博客

首页 > 应用开发 > Java > Map根据Value排序

Map根据Value排序

原创 Java 作者:541732025 时间:2015-04-15 15:50:19 0 删除 编辑
说道Map排序,大家第一时间想到的是,利用现成的TreeMap,它会自动根据Map的Key进行排序。
但是如果要按照Map的Value进行排序呢?api没有提供现成的实现,只能自己实现了。有以下几个核心组件。
1,Comparator
要想自定义排序肯定少不了Comparator,在compare方法里面实现自己的排序逻辑,这里正是借用了Comparator。

2,Map.Entry
想对Map的Value排序,能抽取出相应数据结构吗?Map里面的数据结构其实是一个个的Entry,我们可以利用Map提供的api获取到整个Map的Entry的集合。

3,Collections.sort(List<Map.Entry>, Comparator<Map.Entry>)
有了Comparator,再将Map.Entry放进List,就可以利用Collections的sort对List里面的元素进行排序了。

针对Entry实现自己的排序逻辑:

点击(此处)折叠或打开

  1. private static class ValueComparator implements Comparator<Map.Entry<String, Integer>> {
  2.         @Override
  3.         public int compare(Entry<String, Integer> entry1, Entry<String, Integer> entry2) {
  4.             return entry2.getValue() - entry1.getValue();
  5.         }
  6.     }

测试:

点击(此处)折叠或打开

  1. public static void main(String[] args) {
  2.         Map<String, Integer> map = new HashMap<String, Integer>();
  3.         map.put("a", 2);
  4.         map.put("b", 4);
  5.         map.put("c", 1);
  6.         map.put("d", 5);
  7.         map.put("e", 3);

  8.         List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>();
  9.         list.addAll(map.entrySet());
  10.         Collections.sort(list, new ValueComparator());

  11.         for (Map.Entry<String, Integer> entry : list) {
  12.             System.out.println(entry.getValue());
  13.         }
  14.     }

结果:

点击(此处)折叠或打开

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28912557/viewspace-1578145/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Storm实战之TopN
请登录后发表评论 登录
全部评论

注册时间:2013-05-23

  • 博文量
    127
  • 访问量
    515719