根据Value对Map中的对象进行排序
背景
SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路。
实现
Comparator接口
使用Value排序时,仍然使用TreeMap实现类,只不过需要在TreeMap的构造函数中引入Comparator实现。TreeMap构造器
ValueComparator是Comparator接口的实现,该实现包含了一个普通的Map对象作为成员变量,并在compare方法中做了一点手脚。即在compare方法中,将key的比较转换为value的比较。- 局限性
这种方式只能对Map进行排序,而不能添加单个key-value映射。
具体实现代码
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap; /**
* Created by liutingna on 2017/9/30.
*/
public class TestComparator {
class ValueComparator implements Comparator<String> { Map<String, Long> base; //Comparator外部比较器
public ValueComparator(Map<String, Long> base) {
this.base = base;
} //根据Map的值进行比较
public int compare(String a, String b) {
return base.get(a).compareTo(base.get(b));
}
} public static void main(String[] args) {
Map<String, Long> map = new HashMap<>();
TestComparator testComparator = new TestComparator();
TestComparator.ValueComparator valueComparator = testComparator.new ValueComparator(map);
Map<String, Long> keySortMap = new TreeMap<>();
Map<String, Long> valueSortMap = new TreeMap<>(valueComparator); map.put("aaa", 15L);
map.put("bxw", 13L);
map.put("abc", 14L);
map.put("bbb", 18L);
System.out.println(map);//{aaa=15, bxw=13, abc=14, bbb=18} //根据key进行比较
keySortMap.putAll(map);
System.out.println(keySortMap);//{aaa=15, abc=14, bbb=18, bxw=13}
//根据value进行比较
valueSortMap.putAll(map);
// valueSortMap.put("ccc",17L);//NullPointerException,这种方式只能对Map进行排序,而不能添加单个key-value映射
System.out.println(valueSortMap);//{bbb=18, aaa=15, abc=14, bxw=13}
}
}
相关资料
根据Value对Map中的对象进行排序的更多相关文章
- NSArray中的对象进行排序
看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行排序 使用selector进行排序 小引 我们将要 ...
- 对list集合中的对象进行排序(转载)
原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...
- C++ Vector 中自定义对象的排序
需求: 客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序. 数据存储: 每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面. 老的解决方法: 冒泡排序方法算法 新 ...
- 如何根据对象的属性,对集合(list / set)中的对象进行排序
一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<对象类>(){}方法,这 ...
- 根据List集合中的对象属性排序
首先创建一个Student对象,里面有三个属性,分别是int类型,String类型,Date类型 package com.sinoway.cisp.test; import java.text.Sim ...
- List集合中的对象进行排序
类A: public class A implements Comparable<A>{ private Integer id; private String name; public A ...
- 根据map中某一字段排序
以上是从小到大的排序...要注意.! 需要jdk8...
- Java中对JSONArray中的对象进行排序
String jsonArrStr = "[ { \"ID\": \"135\", \"Name\": \"Fargo ...
- iOS探索:对NSArray中自定义的对象进行排序
http://mobile.51cto.com/hot-434804.htm 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天 ...
随机推荐
- npm init node 通过指令创建一个package.json文件及npm安装package.json
描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...
- 学习动态性能表(13)--v$open_cursor
学习动态性能表 第13篇--V$OPEN_CURSOR 2007.6.8 本视图列出session打开的所有cursors,很多时候都将被用到,比如:你可以通过它查看各个session打开的curs ...
- Xml日志记录文件最优方案(附源代码)
Xml作为数据存储的一种方式,当数据非常大的时候,我们将碰到很多Xml处理的问题.通常,我们对Xml文件进行编辑的最直接的方式是将xml文件加载到XmlDocument,在内存中来对XmlDocume ...
- MQTT事件回调流程
TLS 如下强调: 1.每个IOT设备应该有一对独有的公钥/私钥 2.SERVER的认证通过SERVER的"root certificate" SSL产生过程: $ openssl ...
- Modules:template
ylbtech-Modules: 1.返回顶部 1. 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 9.返 ...
- Windows注册表各个作用
与注册表有关的术语1.注册表:是一个树状分层的数据库(如图).从物理上讲,它是System.dat和User.dat两个文件;从逻辑上讲,它是用户在注册表编辑器中看到的配置数据.2.HKEY :“根键 ...
- SqlServer——用户自定义函数
在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实现一些特殊的功能.可以使用CREATE FUNCTION 语句创建.在创建时需要注意:函数名在数据库中必须唯一, ...
- 怎样增加phpmyadmin导入文件上限
1 2 3 分步阅读 百度经验:jingyan.baidu.com phpMyAdmin 是一个用PHP编写的,可以通过 web 方式控制和操作 MySQL 数据库.因为操作简单被广大的使用mysql ...
- DAY14-前端之Bootstrap框架
Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包. 它支持响应式布局,并且 ...
- hive与hbase整合方式和优劣
分别安装hive 和 hbase 1.在hive中创建与hbase关联的表 create table ganji_ranks (row string,num string) STORED BY 'or ...