160725、Java Map按键排序和按值排序
按键排序(sort by key)
jdk内置的Java.util包下的TreeMap<K,V>既可满足此类需求,原理很简单,其重载的构造器之一

有一个参数,该参数接受一个比较器,比较器定义比较规则,比较规则就是作用于TreeMap<K,V>的键,据此可实现按键排序。
/**
* TODO: 通过Map的key排序,由小到大排序
* @Auhor: RICK
* @Date : 2016年7月26日
*/
public static Map<String, String> sortMapByKey(Map<String, String> oriMap) {
if (oriMap == null || oriMap.isEmpty()) {
return null;
}
Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String key1, String key2) {
int intKey1 = 0, intKey2 = 0;
try {
intKey1 = getInt(key1);
intKey2 = getInt(key2);
} catch (Exception e) {
intKey1 = 0;
intKey2 = 0;
}
return intKey1 - intKey2;
}});
sortedMap.putAll(oriMap);
return sortedMap;
} /**
* TODO: 把字符串转换成数字
* @Auhor: RICK
* @Date : 2016年7月26日
*/
private static int getInt(String str) {
int i = 0;
try {
Pattern p = Pattern.compile("^\\d+");
Matcher m = p.matcher(str);
if (m.find()) {
i = Integer.valueOf(m.group());
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return i;
}
按值排序(sort by value)
按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。
Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。
/**
* TODO: 通过Map的Value排序,由小到大排序
* @Auhor: RICK
* @Date : 2016年7月26日
*/
public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {
Map<String, String> sortedMap = new LinkedHashMap<String, String>();
if (oriMap != null && !oriMap.isEmpty()) {
List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(oriMap.entrySet());
Collections.sort(entryList,
new Comparator<Map.Entry<String, String>>() {
public int compare(Entry<String, String> entry1,
Entry<String, String> entry2) {
int value1 = 0, value2 = 0;
try {
value1 = getInt(entry1.getValue());
value2 = getInt(entry2.getValue());
} catch (NumberFormatException e) {
value1 = 0;
value2 = 0;
}
return value1 - value2;
}
});
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;
} /**
* TODO: 把字符串转换成数字
* @Auhor: RICK
* @Date : 2016年7月26日
*/
private static int getInt(String str) {
int i = 0;
try {
Pattern p = Pattern.compile("^\\d+");
Matcher m = p.matcher(str);
if (m.find()) {
i = Integer.valueOf(m.group());
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return i;
}
160725、Java Map按键排序和按值排序的更多相关文章
- Java Map按键(Key)排序和按值(Value)排序
Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V ...
- java -- 对Map按键排序、按值排序
java -- 对Map按键.按值排序 1.按键排序(sort by key) 直接上代码 ↓ public Map<String, Str ...
- Java Map集合按照key和value排序之法
一.理论基点 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black-Tre ...
- HashMap按键排序和按值排序
对map集合进行排序 今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单 ...
- TreeMap/LinkedHashMap/HashMap按键排序和按值排序
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...
- Java: Map里面的键和值可以为空吗?
在Java中,Map里面的键和值可以为空吗?我们先来看一个例子: private static void TestHashMap() { // TODO Auto-generated method s ...
- Map<Key,Value>基于Value值排序
Map<Key,Value> 排序默认是按照KEY值的升序来进行. 针对按照Value来进行排序有两种方法: 第一种 使用TreeMap 代码如下 public class test{ ...
- java map里面进行ASCII 码从小到大排序(字典序)
public static String getAsciiSort(Map<String, Object> map) { List<Entry<String, Object&g ...
- oracle自定义排序和NULL值排序
1.自定义顺序 当我们希望将某个查询结果指定的显示顺序展示的时候 order by case when column1=1 then 0 case when column1=1 then 1 else ...
随机推荐
- jQuery Autocomplete 用户快速找到并从预设值列表中选择
jQuery Autocomplete 插件根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择.通过给 Autocomplete 字段焦点或者在其中输入字符,插件开始搜索匹配的条目并显示 ...
- Android第三方推送引擎比较
所了解的第三方推送引擎有极光推送(JPush), 百度, 个推,腾讯信鸽等.根据了解,最专业的据说是极光推送,先看极光推送. 一.极光推送 https://www.jpush.cn/ 配置: 1.JP ...
- Android五天乐(第一天)开发环境的部署,开发流程与调试
由于项目要求參与无线端开发,本着技多不压身的指导精神,决定依旧从web转攻client! 由于之前自己玩过两个月android(实际上仅仅是做了两个有失水准的demo级app),本来以为这次再来学习将 ...
- SQL 2005示例库(转载)
sql2005数据库实例 从网上找还得麻烦,转了过来,点击就可以下载! 在学习SQL2005中离开不了SQL2005示例数据库,AdventureWorks数据库下载安装,,northwind数据库下 ...
- SQL Like中的逗号分隔符
SQL Like中的逗号分隔符 在与数据库交互的过程中,我们经常需要把一串ID组成的字符串当作参数传给存储过程获取数据.很多时候我们希望把这个字符串转成集合以方便用于in操作. 有两种方式可以方便 ...
- JVM虚拟机(二):堆、栈、方法区概念区别
Java 堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不 ...
- 将HG版本库推送到Git服务器
如何将HG版本库推送到Git服务器? 目的 习惯使用HG来进行版本管理,但是GitHub代码统计比Bitbucket要丰富,所以准备主力仓库选用Bitbucket,GitHub作为备用仓库. GitH ...
- iOS开发多线程篇 08 —GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- C/C++之文件打开方式差别
一.引言 在上一篇中,需要获取文件的大小,但是获取的文件大小与从文件中读取的数据大小总是对不上(10行数据,文件大小是129,但是读取数据是119),因此,实现的服务器总是出现这个错误:net::ER ...
- GEEK学习笔记— —程序猿面试宝典笔记(二)
所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~ 程序猿面试宝典笔记(一)基本概念 程序猿面试宝典笔记(二)预处理.const和sizeof 程序猿面试宝典笔记(三)auto_ptr ...