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容器进行排序相关推荐

  1. map容器/multimap容器

    目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 ...

  2. map与vector排序

    问题来源: PAT1095 B组 map容器不可以直接使用sort,要么仅对key排序,即构建cmp函数;要么将其包装到vector容器中,构造cmp函数可以同时对两个值进行排序(同时排序不代表可以拆 ...

  3. Map容器大小影响key的索引

    单元测试偶然发现的Map一个问题 Map<String,String> map1 = new HashMap<>();map1.put("aaa", &qu ...

  4. C++中map容器的说明和使用技巧

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 1   头文件 #include <map> 2   定义 map< ...

  5. c++ map 修改value_C++知识分享之STL容器:set 容器与 map 容器的简单应用

    set容器中一些函数,取自百度其他大佬已总结好的,如有侵权,请联系删除! set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容 ...

  6. map容器中删除一个元素(value)

    一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...

  7. C++map容器-排序

    map容器排序 利用仿函数,可以改变排序规则 代码如下: #include <iostream> using namespace std; #include <map> //m ...

  8. C++map容器-插入和删除

    map插入和删除 功能描述: map容器进行插入数据和删除数据 函数原型: 代码如下: #include <iostream> using namespace std; #include ...

  9. C++map容器-查找和统计

    map查找和统计 功能描述: 对map容器进行查找数据以及统计数据 函数原型: 代码如下: #include <iostream> using namespace std; #includ ...

最新文章

  1. pagehelper分页
  2. jquery 实现返回顶部功能
  3. python include的功能_在Python的Config中增加Include功能
  4. windows7系统配置maven环境
  5. fgetcsv php,PHP - fgetcsv - 分隔符被忽略?
  6. Spring AOP注解
  7. CodeBlocks下载与安装
  8. ggradar画雷达图
  9. 跑分软件测试原理,只会比高低?教你三分钟看懂安兔兔跑分
  10. 邮箱容量多大?163邮箱发邮件无限容量解读
  11. 麻理工MIT的脑计划eyewire (顺便学习一下医学影像知识)
  12. Android O (8.0) 新特性介绍
  13. 苹果连接电脑 计算机不显示硬盘,苹果连接电脑没反应怎么办?苹果连接电脑没反应解决方法...
  14. 计算机进入bios,如何进入bios(电脑进入BIOS的两种实用方法)
  15. 欢迎使用CS方分分分n编辑器
  16. 2016年ios公开可利用漏洞总结
  17. Linux系统必学必会知识点整理
  18. MySQL系列教程(五)
  19. 蜂鸣器分类及声音控制说明
  20. HTTPHTTPS账号密码获取与ettercap局域网内DNS欺骗

热门文章

  1. 如何查看表或列的所有外键?
  2. 选择与Git进行提交意味着什么?
  3. 如何将列表分成大小均匀的块?
  4. 导 Kinect2库,opencv库,pcl库
  5. 计算机二级office函数日期,Excel函数-日期和文本函数-计算机二级Office
  6. 全向轮机器人应用平台
  7. html语言汇总,第三讲HTML语言全面介绍汇总.ppt
  8. table 条数过大优化_MySQL 数据库优化,看这篇就够了 | 不长不短,2000 字小结
  9. 关于vuex中actions可以返回promise的用法
  10. 事件对象使用方法大全(源码解析)