对于java实体集合排序这里总结了三种方法,第一种是通过原生支持的Comparator做排序,第二种是通过java8的Lambda表达式进行排序,第三种是使用apache-common的工具包进行排序。经测试都能达到想要的效果,相比而言,第三种代码可读性、易用性更强,推荐使用第三种。

第三种排序需要引入Apache-common的beanutils、collections包,maven如下

<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version>
</dependency>
<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.3</version>
</dependency>

代码

public class TestCollections {private List<Map<String, Object>> getDataList() {Map<String, Object> map1 = new HashMap<>(3);map1.put("id", 2);map1.put("name", "小明");Map<String, Object> map2 = new HashMap<>(3);map2.put("id", 1);map2.put("name", "小张");Map<String, Object> map3 = new HashMap<>(3);map3.put("id", 3);map3.put("name", "小红");List<Map<String, Object>> dataList = new ArrayList<>();dataList.add(map1);dataList.add(map2);dataList.add(map3);return dataList;}@Testpublic void sort() {List<Map<String, Object>> dataList = getDataList();System.out.println("排序前:" + dataList);// 第一种 Collections 进行降序排序Collections.sort(dataList, new Comparator<Map>() {@Overridepublic int compare(Map o1, Map o2) {int id1 = Integer.parseInt(o1.get("id").toString());int id2 = Integer.parseInt(o2.get("id").toString());//按照id进行降序排列return id2 - id1;}});System.out.println("Collections降序排序后:" + dataList);// 第二种 java8 Lambda表达式 进行正序排序dataList = getDataList();dataList.sort((Map o1, Map o2) -> {int id1 = Integer.parseInt(o1.get("id").toString());int id2 = Integer.parseInt(o2.get("id").toString());return id1 - id2;});System.out.println("Lambda正序排序后:" + dataList);// 第三种 工具包 进行降序排序dataList = getDataList();Comparator mycmp1 = ComparableComparator.getInstance();//逆序mycmp1 = ComparatorUtils.reversedComparator(mycmp1);ArrayList<Object> sortFields = new ArrayList<>();//主排序(第一排序)sortFields.add(new BeanComparator("id", mycmp1));// 创建一个排序链ComparatorChain multiSort = new ComparatorChain(sortFields);// 开始真正的排序,按照先主,后副的规则Collections.sort(dataList, multiSort);System.out.println("工具包降序排序后:" + dataList);}
}

运行结果

排序前:[{name=小明, id=2}, {name=小张, id=1}, {name=小红, id=3}]
Collections降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]
Lambda正序排序后:[{name=小张, id=1}, {name=小明, id=2}, {name=小红, id=3}]
工具包降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]
  • 13 小时前发布

java List实体排序相关推荐

  1. java 怎么自定义排序_Java如何实现List自定义排序

    Java如何实现List自定义排序,自定义,即为,详细内容,相关文章,更多关于 Java如何实现List自定义排序 易采站长站,站长之家为您整理了Java如何实现List自定义排序的相关内容. 实体类 ...

  2. java中自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  3. java 根据实体对象生成 增删改的SQL语句 ModelToSQL

    2019独角兽企业重金招聘Python工程师标准>>> java 根据实体对象生成 增删改的SQL语句 ModelToSQL 转载于:https://my.oschina.net/m ...

  4. 将JSON数据转换成JAVA的实体类

    思路:首先将JSON格式的数据转换成JSONObject,然后将JSONObject转换成Java的实体类(其中类属性包括List等类型) Java实体类: SearchFilter 类 1 publ ...

  5. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  6. 用Java对HashMap排序

    介绍: 在本教程中,我们将学习如何对Java HashMap进行排序. 我们可以按键或按值对HashMap进行排序. 我们将讨论这两种策略. 对Java 为了跟上本文的其余部分,我们首先构造一个Has ...

  7. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  8. java中的排序方法,Java中的排序比较方式:自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  9. 八大排序:Java实现八大排序及算法复杂度分析

    目录 QUESTION:八大排序:Java实现八大排序及算法复杂度分析 ANSWER: 一:冒泡排序 1.算法分析 2.时间复杂度分析 3.代码 二:选择排序 1.算法分析 2.时间复杂度分析 3.代 ...

最新文章

  1. (转)如何修改maven的默认jdk版本
  2. 社群:加入 Spring 技术学习群
  3. GPAC MP4文件写入(支持H264、H265)
  4. java mysql blob 存储图片,Java实现用Mysql存取图片操作实例
  5. Nginx常用功能配置及优化
  6. Google Guava多集
  7. 【NBIoT无线模块DTU数传电台】串口服务器RS232/RS485端口工业路由信号传输
  8. lightning接口_Lightning太赚钱?iPhone永远不会用Type-C
  9. Hibernate的核心组件简单介绍
  10. C++ OpenCV 问题
  11. 如何基于云通讯构建企业移动信息化竞争力
  12. Linux Scheduling Domains
  13. freemarker判断对象是否为空
  14. VS2017:无法安装Win10SDK_10.0.15063.UWP.Native、无法安装Microsoft.VisualC.Redist.12
  15. mybatis动态sql,条件判断详解示例
  16. lenovo G50-80bios设置U盘启动选项及win10永久激活及win10下载
  17. CSS3颜色不透明度如何设置?
  18. IDEA自带的逆向工程功能
  19. wine linux 目录,linux下wine安装
  20. RefreshLayout让你半小时以内完成一个列表界面

热门文章

  1. 12.映射表map.rs
  2. 《openssl 编程》之大数
  3. 漫游Kafka设计篇之消息传输的事务定义
  4. cocos2d-x初探学习笔记(3)--动作(CCAction)
  5. 告别DNS劫持,一文读懂DoH
  6. ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念
  7. 【项目介绍】搜索引擎
  8. Python识别图片的清晰度
  9. 面试官:为什么SpringBoot的 jar 可以直接运行?
  10. Go mod 七宗罪