根据key或value将map容器进行排序
java中的HashMap
是无序的,有序容器可用LinkedHashMap
在cmopare
接口中,Integer
或者Date
通过compareTo
方法进行对象比较时,“比较对象” 比 “被比较对象” 大时返回-1,相等时返回0,小则返回1。
public class ContainerHelper {/*** 将容器按照日期、数字等类型的键,排序** @param map* @param orderRule 0为升序,1为降序* @param keyType 0为数字类型 1为日期类型 2为时间格式的字符串* @return*/public static Map containerSortByKey(Map map, Integer keyType, Integer orderRule) {if (ConstantHelper.NUMBER_0 == keyType) {List<Map.Entry<Integer, Object>> keyList = new ArrayList<Map.Entry<Integer, Object>>(map.entrySet());Collections.sort(keyList, new Comparator<Map.Entry<Integer, Object>>() {@Overridepublic int compare(Map.Entry<Integer, Object> o1, Map.Entry<Integer, Object> o2) {return ConstantHelper.NUMBER_0 == orderRule ? o1.getKey().compareTo(o2.getKey()) : o2.getKey().compareTo(o1.getKey());}});HashMap<Integer, Object> resultMap = new LinkedHashMap<>();for (Map.Entry<Integer, Object> entry : keyList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;} else if (ConstantHelper.NUMBER_1 == keyType) {List<Map.Entry<Date, Object>> keyList = new ArrayList<Map.Entry<Date, Object>>(map.entrySet());Collections.sort(keyList, new Comparator<Map.Entry<Date, Object>>() {@Overridepublic int compare(Map.Entry<Date, Object> o1, Map.Entry<Date, Object> o2) {return ConstantHelper.NUMBER_0 == orderRule ? o1.getKey().compareTo(o2.getKey()) : o2.getKey().compareTo(o1.getKey());}});HashMap<Date, Object> resultMap = new LinkedHashMap<>();for (Map.Entry<Date, Object> entry : keyList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;} else if (ConstantHelper.NUMBER_2 == keyType) {List<Map.Entry<String, Object>> keyList = new ArrayList<Map.Entry<String, Object>>(map.entrySet());Collections.sort(keyList, new Comparator<Map.Entry<String, Object>>() {@Overridepublic int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {String timeStamp01 = o1.getKey();String timeStamp02 = o2.getKey();return ConstantHelper.NUMBER_0 == orderRule ? DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03).compareTo(DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03)): DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03).compareTo(DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03));}});HashMap<String, Object> resultMap = new LinkedHashMap<>();for (Map.Entry<String, Object> entry : keyList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;}return null;}/*** 将容器按照日期、数字等类型的值,排序** @param map* @param valueType 0为数字类型 1为日期类型* @param orderRule 0为升序,1为降序* @return*/public static Map containerSortByValue(Map map, Integer valueType, Integer orderRule) {if (ConstantHelper.NUMBER_0 == valueType) {List<Map.Entry<Object, Integer>> valueList = new LinkedList<Map.Entry<Object, Integer>>(map.entrySet());Collections.sort(valueList, new Comparator<Map.Entry<Object, Integer>>() {@Overridepublic int compare(Map.Entry<Object, Integer> o1, Map.Entry<Object, Integer> o2) {return ConstantHelper.NUMBER_0 == orderRule ? o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue());}});HashMap<Object, Integer> resultMap = new LinkedHashMap<>();for (Map.Entry<Object, Integer> entry : valueList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;} else if (ConstantHelper.NUMBER_1 == valueType) {List<Map.Entry<Object, Date>> valueList = new LinkedList<Map.Entry<Object, Date>>(map.entrySet());Collections.sort(valueList, new Comparator<Map.Entry<Object, Date>>() {@Overridepublic int compare(Map.Entry<Object, Date> o1, Map.Entry<Object, Date> o2) {return ConstantHelper.NUMBER_0 == orderRule ? (o1.getValue().compareTo(o2.getValue())) : (o2.getValue().compareTo(o1.getValue()));}});HashMap<Object, Date> resultMap = new LinkedHashMap<>();for (Map.Entry<Object, Date> entry : valueList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;} else if (ConstantHelper.NUMBER_2 == valueType) {List<Map.Entry<Object, String>> keyList = new ArrayList<Map.Entry<Object, String>>(map.entrySet());Collections.sort(keyList, new Comparator<Map.Entry<Object, String>>() {@Overridepublic int compare(Map.Entry<Object, String> o1, Map.Entry<Object, String> o2) {String timeStamp01 = o1.getValue();String timeStamp02 = o2.getValue();return ConstantHelper.NUMBER_0 == orderRule ? DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03).compareTo(DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03)): DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03).compareTo(DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03));}});HashMap<Object, String> resultMap = new LinkedHashMap<>();for (Map.Entry<Object, String> entry : keyList) {resultMap.put(entry.getKey(), entry.getValue());}return resultMap;}return null;}
}
根据key或value将map容器进行排序相关推荐
- map容器/multimap容器
目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 ...
- map与vector排序
问题来源: PAT1095 B组 map容器不可以直接使用sort,要么仅对key排序,即构建cmp函数;要么将其包装到vector容器中,构造cmp函数可以同时对两个值进行排序(同时排序不代表可以拆 ...
- Map容器大小影响key的索引
单元测试偶然发现的Map一个问题 Map<String,String> map1 = new HashMap<>();map1.put("aaa", &qu ...
- C++中map容器的说明和使用技巧
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 1 头文件 #include <map> 2 定义 map< ...
- c++ map 修改value_C++知识分享之STL容器:set 容器与 map 容器的简单应用
set容器中一些函数,取自百度其他大佬已总结好的,如有侵权,请联系删除! set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容 ...
- map容器中删除一个元素(value)
一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...
- C++map容器-排序
map容器排序 利用仿函数,可以改变排序规则 代码如下: #include <iostream> using namespace std; #include <map> //m ...
- C++map容器-插入和删除
map插入和删除 功能描述: map容器进行插入数据和删除数据 函数原型: 代码如下: #include <iostream> using namespace std; #include ...
- C++map容器-查找和统计
map查找和统计 功能描述: 对map容器进行查找数据以及统计数据 函数原型: 代码如下: #include <iostream> using namespace std; #includ ...
最新文章
- pagehelper分页
- jquery 实现返回顶部功能
- python include的功能_在Python的Config中增加Include功能
- windows7系统配置maven环境
- fgetcsv php,PHP - fgetcsv - 分隔符被忽略?
- Spring AOP注解
- CodeBlocks下载与安装
- ggradar画雷达图
- 跑分软件测试原理,只会比高低?教你三分钟看懂安兔兔跑分
- 邮箱容量多大?163邮箱发邮件无限容量解读
- 麻理工MIT的脑计划eyewire (顺便学习一下医学影像知识)
- Android O (8.0) 新特性介绍
- 苹果连接电脑 计算机不显示硬盘,苹果连接电脑没反应怎么办?苹果连接电脑没反应解决方法...
- 计算机进入bios,如何进入bios(电脑进入BIOS的两种实用方法)
- 欢迎使用CS方分分分n编辑器
- 2016年ios公开可利用漏洞总结
- Linux系统必学必会知识点整理
- MySQL系列教程(五)
- 蜂鸣器分类及声音控制说明
- HTTPHTTPS账号密码获取与ettercap局域网内DNS欺骗