博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序之List集合里Map的value排序
阅读量:4092 次
发布时间:2019-05-25

本文共 2230 字,大约阅读时间需要 7 分钟。

(Notice:欢迎交流和沟通,Wx:IT_Ezra,QQ 654303408。 有问题讨论也可联系我。)

(PS:其实当我们在工作中,有时候会用到这种排序,所以我在这里会稍微介绍一下这种排序,主要运用到了集合类。)

为什么我们需要做排序?

排序对于我们来说是一件非常基础的事情,排序算法有很多,但是在实际过程中,我们为必也用得到。因为java都为我们封装好了,我们可以更加去了解arrays.sort()和collections.sort()的排序算法实现。collection内部是使用的arrays.sort。而arrays.sort()的实现就是归并加排序。对于网上的一些技术贴,里面也提到了如果数组长度小于47,就会使用插入算法。如果小于286就会使用双轴快速排序,如果大于286就会使用归并算法。还有目前一个算法,可以了解一下。另外也有一个说法就是,Arrays.sort() 采用了2种排序算法 – 基本类型数据使用快速排序法,对象数组使用归并排序。所以可以看到,了解这些还是有必要的。

点题

其实这个问题,我们使用了collections.sort()方法,其中第一个参数为List的泛型,任何对象都可以。包括Map,后面跟的的比较器comparator(),然后重写比较器里面的compare方法()。返回值为int,如果正数为正序,负数为逆序。通常是Obecjt_1.compareTo(Object_2)。放一段代码可以体验一下。
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map; public class java_ListMapSort {    public static void main(String[] args) {        // TODO Auto-generated method stub         List
> list = new ArrayList
>(); Map
map1 = new HashMap
(); map1.put("name", "p"); map1.put("cj", "5"); Map
map2 = new HashMap
(); map2.put("name", "h"); map2.put("cj", "12"); Map
map3 = new HashMap
(); map3.put("name", "f"); map3.put("cj", "31"); list.add(map1); list.add(map3); list.add(map2); //排序前 for (Map
map : list) { System.out.println(map.get("cj")); } Collections.sort(list, new Comparator
>() { public int compare(Map
o1, Map
o2) { Integer name1 = Integer.valueOf(o1.get("cj").toString()) ;//name1是从你list里的第一个name Integer name2 = Integer.valueOf(o2.get("cj").toString()) ; //name2是从你list里的第二个name return name1.compareTo(name2); } }); //排序后 System.out.println("-------------------"); for (Map
map : list) { System.out.println(map.get("cj")); } }}
对于java1.7,我们是使用的这种方法。对于java1.8的新特征,有了Lambda表达式。代码写起来就更加简单了一点。核心代码如下。如果你的map里面本身放的就是int类型,就可以不需要转型了。直接get(“key”),然后进行比较。
Collections.sort(list, (o1,o2)-> {                   Integer name1 = Integer.valueOf(o1.get("cj").toString()) ;//name1是从你list里的第一个name                Integer name2 = Integer.valueOf(o2.get("cj").toString()) ; //name2是从你list里第二个name                return name1.compareTo(name2);            }        });
Look,lambda表达式是不是看起来更简洁,java也在更新,多了解一些java的新特性。让自己更方便的写代码。希望各位同学默默加油咯。

转载地址:http://ftcii.baihongyu.com/

你可能感兴趣的文章
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>
MAVLink学习之路05_MAVLink应用编程接口分析(也有讲STM32下的收发函数)
查看>>
找到了中文版的mavlink手册
查看>>
浅谈飞控开发的仿真功能
查看>>
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
PX4+激光雷达在gazebo中仿真实现(古月居)
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>