根据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类,聊天 ...
随机推荐
- Arc083_F Collecting Balls
传送门 题目大意 给定$N$,在$(1,0),(2,0)......(N,0)$和$(0,1),(0,2)...(0,N)$上都有$1$个机器人,同时给定$2N$个坐标$(x,y),x,y\in[1, ...
- Linux命令学习(18):route命令
版权声明更新:2017-05-20博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的route命令. ...
- java实现sendemail
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</arti ...
- 纯JS实现房贷利率报表对比
最近朋友买房,想计算下自己的房贷的还款情况,自己正好周末没事,从网上找来点代码修改,也算是对自己技术的巩固吧. 目前这个还只是个初级版本,暂时可以在PC上正常访问,将来会一步一步的把相继功能都加上的, ...
- C# 常用文件操作
public class IoHelper { /// <summary> /// 判断文件是否存在 /// </summary> /// <param name=&qu ...
- hihoCoder#1121(二分图判定)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄 ...
- Django基础(二)—— models
六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ...
- linux下mysql配置文件my.cnf最详细解释
MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于/etc/my.cnf. 可以查找下:find / -name my.cnf m ...
- SQL 从身份证号得到出生日期、年龄、男女
), CONVERT(smalldatetime, SUBSTRING(b.IDCard, , )), ) AS BrithDate_Name, DATEDIFF(year, CONVERT(smal ...
- Solaris10如何确认DirectIO是否已经启用
对于Oracle而言,如果数据库存储在UFS文件系统上,启用DirectIO能够提高数据库性能.Oracle有个参数filesystemio_options可以控制数据库是否使用DirectIO. ...