Java小知识-----Map 按Key排序和按Value排序
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排序相关推荐
- 对List中的map的key按中文拼音进行排序。
对List中的map的key按中文拼音进行排序. private static void compareToTest() {Map<String,Object> mapTemp = new ...
- java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...
Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...
- (转载)JAVA小知识
1. 数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性. String有length()这个方法. ...
- 【Java】每日一点Java小知识 --- day6
每日一点Java基础小知识 - day6 欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔 方法重载: 被重载的方法必须改变参 ...
- java集合按大小排序_JAVA中对List根据map某个key值从小到大顺序进行排序
/** * @功能描述:排序方法 * @author LJ * 2018年10月29日 -下午2:38:15 */ public class java_ListMapSort { public sta ...
- java小知识_java小知识点简单回顾
1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...
- Java小案例(二) 用数组实现增删查改排序
文章目录 案例一 案例二 案例三 案例四 案例五 案例一 Student.Java package curd;public class Student {private String stuid;pr ...
- java小知识:http请求传输文件流
前文:项目里要给第三方传输图片,对方接口要求传文件流,而不是常用的base64编码,在此记录一下- 直接贴代码吧: import com.alibaba.fastjson.JSONObject; im ...
- java小知识课前演讲_演讲技巧小贴士---记录
演讲技巧小贴士-1 有趣的演讲演讲要讲求寓教于乐.不是指做演讲时要像猴子一样又蹦又跳,但是同文章或杂志相比,人们期望在演讲中感受到你的激情,而不是枯燥无味的背诵. 放慢速度紧张或没经验的演讲者更容易在 ...
最新文章
- 【每日DP】day7P1064 金明的预算方案 (分组背包,我又悟了)难度⭐⭐★
- vscode输入vue自动_vscode配置总结可收藏/vscode用户设置大全/vue代码模板,vscodevue...
- 知识工程学:一个新的重要研究领域
- 《Java 核心技术卷1 第10版》学习笔记------异常
- Atitit.事件机制 与 消息机制的联系与区别
- RouterOS计划任务实例
- python ^ 与 - +是有运算的先后顺序的
- 【DFS】LeetCode 40. Combination Sum II
- SQL Server 透视与逆透视转换解析
- java碰碰球历险记下载_【Java写的碰碰球游戏(2) 】
- 基于单片机的无线病房呼叫系统设计
- java shiro教程_10 分钟快速上手 Shiro 新手教程
- linux 域名劫持,域名被劫持处理方案
- 一. APP连续闪退修复方案初版
- 洛谷P3373 线段树2(乘法加法lazytag)
- html 图片不能选中状态,css图片不让选中状态如何实现
- 后台管理系统开发流程
- 新上线的材料计算超算云平台Mcloud V2.0版本推出全新功能——web端工作流拖拽提交作业+便捷web端建模
- 【Deep Learning学习笔记】Deep learning for nlp without magic_Bengio_ppt_acl2012
- Python将列表元素按指定个数分组小技巧