Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。

1、按键排序

jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序。

代码:

 1 public class MapSortDemo {
 2
 3     public static void main(String[] args) {
 4
 5         Map<String, String> map = new TreeMap<String, String>();
 6
 7         map.put("KFC", "kfc");
 8         map.put("WNBA", "wnba");
 9         map.put("NBA", "nba");
10         map.put("CBA", "cba");
11
12         Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序
13
14         for (Map.Entry<String, String> entry : resultMap.entrySet()) {
15             System.out.println(entry.getKey() + " " + entry.getValue());
16         }
17     }
18
19     /**
20      * 使用 Map按key进行排序
21      * @param map
22      * @return
23      */
24     public static Map<String, String> sortMapByKey(Map<String, String> map) {
25         if (map == null || map.isEmpty()) {
26             return null;
27         }
28
29         Map<String, String> sortMap = new TreeMap<String, String>(
30                 new MapKeyComparator());
31
32         sortMap.putAll(map);
33
34         return sortMap;
35     }
36 }
37
38
39 比较器类
40
41 class MapKeyComparator implements Comparator<String>{
42
43     @Override
44     public int compare(String str1, String str2) {
45
46         return str1.compareTo(str2);
47     }
48 }

2、按值排序

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c) 
来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

public class MapSortDemo {public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>();map.put("KFC", "kfc");map.put("WNBA", "wnba");map.put("NBA", "nba");map.put("CBA", "cba");Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序for (Map.Entry<String, String> entry : resultMap.entrySet()) {System.out.println(entry.getKey() + " " + entry.getValue());}}/*** 使用 Map按value进行排序* @param map* @return*/public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {if (oriMap == null || oriMap.isEmpty()) {return null;}Map<String, String> sortedMap = new LinkedHashMap<String, String>();List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(oriMap.entrySet());Collections.sort(entryList, new MapValueComparator());Iterator<Map.Entry<String, String>> iter = entryList.iterator();Map.Entry<String, String> tmpEntry = null;while (iter.hasNext()) {tmpEntry = iter.next();sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());}return sortedMap;}
}

比较器类

class MapValueComparator implements Comparator<Map.Entry<String, String>> {@Overridepublic int compare(Entry<String, String> me1, Entry<String, String> me2) {return me1.getValue().compareTo(me2.getValue());}
}

原作者链接:https://www.cnblogs.com/zhujiabin/p/6164826.html

转载于:https://www.cnblogs.com/charles8866/p/10972041.html

Java小知识-----Map 按Key排序和按Value排序相关推荐

  1. 对List中的map的key按中文拼音进行排序。

    对List中的map的key按中文拼音进行排序. private static void compareToTest() {Map<String,Object> mapTemp = new ...

  2. java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...

  3. (转载)JAVA小知识

    1.    数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性. String有length()这个方法. ...

  4. 【Java】每日一点Java小知识 --- day6

    每日一点Java基础小知识 - day6 欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔 方法重载: 被重载的方法必须改变参 ...

  5. java集合按大小排序_JAVA中对List根据map某个key值从小到大顺序进行排序

    /** * @功能描述:排序方法 * @author LJ * 2018年10月29日 -下午2:38:15 */ public class java_ListMapSort { public sta ...

  6. java小知识_java小知识点简单回顾

    1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...

  7. Java小案例(二) 用数组实现增删查改排序

    文章目录 案例一 案例二 案例三 案例四 案例五 案例一 Student.Java package curd;public class Student {private String stuid;pr ...

  8. java小知识:http请求传输文件流

    前文:项目里要给第三方传输图片,对方接口要求传文件流,而不是常用的base64编码,在此记录一下- 直接贴代码吧: import com.alibaba.fastjson.JSONObject; im ...

  9. java小知识课前演讲_演讲技巧小贴士---记录

    演讲技巧小贴士-1 有趣的演讲演讲要讲求寓教于乐.不是指做演讲时要像猴子一样又蹦又跳,但是同文章或杂志相比,人们期望在演讲中感受到你的激情,而不是枯燥无味的背诵. 放慢速度紧张或没经验的演讲者更容易在 ...

最新文章

  1. 【每日DP】day7P1064 金明的预算方案 (分组背包,我又悟了)难度⭐⭐★
  2. vscode输入vue自动_vscode配置总结可收藏/vscode用户设置大全/vue代码模板,vscodevue...
  3. 知识工程学:一个新的重要研究领域
  4. 《Java 核心技术卷1 第10版》学习笔记------异常
  5. Atitit.事件机制 与 消息机制的联系与区别
  6. RouterOS计划任务实例
  7. python ^ 与 - +是有运算的先后顺序的
  8. 【DFS】LeetCode 40. Combination Sum II
  9. SQL Server 透视与逆透视转换解析
  10. java碰碰球历险记下载_【Java写的碰碰球游戏(2) 】
  11. 基于单片机的无线病房呼叫系统设计
  12. java shiro教程_10 分钟快速上手 Shiro 新手教程
  13. linux 域名劫持,域名被劫持处理方案
  14. 一. APP连续闪退修复方案初版
  15. 洛谷P3373 线段树2(乘法加法lazytag)
  16. html 图片不能选中状态,css图片不让选中状态如何实现
  17. 后台管理系统开发流程
  18. 新上线的材料计算超算云平台Mcloud V2.0版本推出全新功能——web端工作流拖拽提交作业+便捷web端建模
  19. 【Deep Learning学习笔记】Deep learning for nlp without magic_Bengio_ppt_acl2012
  20. Python将列表元素按指定个数分组小技巧

热门文章

  1. Attributes.Add用途与用法
  2. mysql常用操作(一)
  3. 解决三星手机EditText背景色的问题
  4. block传值 链接
  5. Leetcode: LRU Cache
  6. Synergy如果timeout的可能原因
  7. Lecture 6 Order Statistics
  8. jvm fastdebug
  9. 集算器访问HTTP数据的代码示例
  10. c/c++多参数的问题