一、题目

对这个map进行排序,要求是先排序value小->大再排序key小->大(在value相等的情况)

结果:

我感觉思路主要是这个比较器,非常丝滑!!!

new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {//当value相等的时候if (o1.getValue().equals(o2.getValue())) {//按照key升序return o1.getKey().compareTo(o2.getKey());}else {//当value不相等的时候,按照value升序return o1.getValue() - o2.getValue();}}}

二、解法

1.比较传统的解法:ArrayList

其中有任何不懂的请到QQ群来问我,免费解答~~   QQ群在我收藏了最多的博文里的

   public static void main(String[] args) {Map<String, Integer> map = new HashMap<String, Integer>();map.put("d", 2);map.put("c", 1);map.put("b", 4);map.put("a", 3);map.put("f", 6);map.put("e", 6);List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());Collections.sort(infoIds,new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if (o1.getValue().equals(o2.getValue())) {return o1.getKey().compareTo(o2.getKey());}else {return o1.getValue() - o2.getValue();}}} );infoIds.forEach(o1 -> {System.out.println(o1.getKey() +":" + o1.getValue());});

2.JAVA8 新特性:Stram

  public static void main(String[] args) {Map<String, Integer> map = new HashMap<String, Integer>();map.put("d", 2);map.put("c", 1);map.put("b", 4);map.put("a", 3);map.put("f", 6);map.put("e", 6);HashMap<String, Integer> collect = map.entrySet().stream().sorted(new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if (o1.getValue().equals(o2.getValue())) {return o1.getKey().compareTo(o2.getKey());}else {return o1.getValue() - o2.getValue();}}//注意一定要用LinkedHashMap,否则打印出还是会乱序,只有LinkedHashMap会保留排序结果。用HashMap还是乱的。不信你可以试试}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));collect.forEach((key, value) -> {System.out.println(key + ":" + value);});

三、总结

个人喜欢用stream感觉更加丝滑~  不用提前开一个空间去处理,到collect需要的时候再开空间,比较符合思考。而且之后还有对排序好的内容进行过滤之类操作挺方便!!

Map先排序value小->大再排序key小->大,ArrayList与Stream分别实现相关推荐

  1. 数据结构:设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的

    题目: 设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后:在k1值相同的情况下,再看k2,k2值小的在前,大的在后.满足这种要求的排 ...

  2. java8新特性:对map集合排序,根据key或者value操作排序(升序、降序)

    java8新特性:对map集合排序,根据key或者value操作排序(升序.降序) 直接上代码: package com.drew.test; import java.util.List; impor ...

  3. STL之map中排序方式的重载

    map中的数据默认是按key值字典序排的 栗子: #include <iostream> #include <map> using namespace std; //typed ...

  4. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  5. C++屏蔽map自动排序

    最近写项目时,发现map自动排序了,以前没注意这个问题,可能ms考虑到map查询效率问题,插入时候就自动按key排序,查找其内部构造,发现其是模板实现方式,咱们可以改一改模板就可以避免自动排序(万不得 ...

  6. 代达罗斯之殇-大数据领域小文件问题解决攻略

    : 点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据 ...

  7. 大顶堆小顶堆优先队列

    特性和应用场景 大顶堆小顶堆,也叫优先队列,是一种基于数组+平衡二叉树的数据结构. 主要用于排序,增减操作的速度较快(O(logn)) 适合带有优先级的排序场景,比如处理订单的时候,VIP用户的优先级 ...

  8. python字典按照key排序_python中字典按key值排序的实现方法

    之前小编介绍了字典本身不可排序,但按值可以,小编也介绍了按value值排序的三种方法.sorted()函数可以对数字或字符串进行排序,按key排序只是输出的key值的排序列表,使用sorted()函数 ...

  9. java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序

    在这篇文章中,您将学习如何使用Java对Map按照键或值进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Ja ...

  10. C++map容器-排序

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

最新文章

  1. 批量下载文献中的参考文献
  2. 如果输送知识不再重要,那么教育问题出在哪里?
  3. SpringBoot优点
  4. COSCon'21 参会指南 你想要的这里都有
  5. centos7:塔建pure_ftpd虚拟用户
  6. 你真的理解BIO、NIO、AIO的区别吗?
  7. 实现编辑商品信息功能
  8. 三层交换机连接路由器时配置OSPF注意事项
  9. 搜索引擎html和css,CSS样式对搜索引擎排名的影响
  10. stm32跑马灯程序
  11. java中图片排版_基于Java的图像排版系统的设计.pdf
  12. stm32 火灾自动报警及联动控制源码_火灾自动报警系统设计规范 :联动控制
  13. Java语言,基于TCP编写一个简单的Client/Server 网络应用程序。
  14. 看看阿里双十一970P数据处理得,那叫一个牛啤!
  15. cleanmymac4.12最新版下载安装教程
  16. PXC+haproxy+keepalived环境搭建
  17. EasyUI的datagrid删除后一页所有数据不自动显示前页数据
  18. 计算机科学新技术新应用发展,新技术的发展和应用
  19. VSCode嵌入式硬件开发环境设置
  20. 利用echarts实现心形图片排列效果

热门文章

  1. WolframTones:用一种新科学谱写一种新音乐
  2. 软件外包中常见的七个错误之一 - 不懂用户需求
  3. ctf赛题上传一个php木马,文件上传的ctf_web题目【伪协议】
  4. 安装ssd后不识别网卡_群晖E10M20-T1:你以为它是张网卡,其实它还带俩SSD
  5. python列表语法_python学习之列表语法
  6. 小米6 twrp_小米手机刷国际版欧版 MIUI 的详细教程
  7. Python - OpenCV库的安装
  8. NYOJ 643 发短信(模拟)
  9. java 原子类_没用过Java原子类?我来手写一个AtomicInteger
  10. iphone7home键按压失灵_iPhone home键失灵怎么办 iPad home键失灵解决办法【详解】