最近在实际的开发工作中,碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;/*** Created by IntelliJ IDEA* 这是一个神奇的Class** @author zhz* @date 2019/9/25 10:37*/
public class DemoTest {public static void main(String[] args) {List<String> list1 = new ArrayList<>();list1.add("3");list1.add("4");list1.add("1");list1.add("2");list1.add("f");list1.add("a");System.out.println("排序前--:"+list1.toString());Collections.sort(list1);System.out.println("排序前后--:"+list1.toString());}
}

正在上传…重新上传取消​

打印结果如下:

可以总结为,加单的String类型的排序,是排数字,再排字母,默认排序方式是升序。

下面言归正传,要是一个List中存的是某种对象,该对象有多种属性,那么如何进行升序或者降序排序呢?

这个时候我们就会进行一系列猛如虎的操作,结果有可能会遇到下面这种坑:

这时候你可能会问那我们怎么搞啊:

下面首先我们先创建一个测试用类,这里重点说一哈,可以实现一个Comparable接口重写compareTo

正在上传…重新上传取消​

/*** Created by IntelliJ IDEA* 这是一个神奇的Class** @author zhz* @date 2019/9/25 10:49*/
public class TestA implements Comparable<TestA> {private String name;private Integer age;public TestA(String name, Integer age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "TestA [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(TestA o) {return this.age.compareTo(o.getAge());}}

正在上传…重新上传取消​

我们就可以进行下一步的检验结果的操作了

正在上传…重新上传取消​

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/*** Created by IntelliJ IDEA* 这是一个神奇的Class** @author zhz* @date 2019/9/25 10:37*/
public class DemoTest {public static void main(String[] args) {TestA testA1 = new TestA("老张", 3);TestA testA2 = new TestA("老李", 1);TestA testA3 = new TestA("老王", 2);List<TestA> list  = new ArrayList<>();list.add(testA1);list.add(testA2);list.add(testA3);System.out.println("排序前--:"+list.toString());Collections.sort(list, new Comparator<TestA>() {@Overridepublic int compare(TestA o1, TestA o2) {//升序return o1.getAge().compareTo(o2.getAge());}});System.out.println("升序排序后--:"+list.toString());Collections.sort(list, new Comparator<TestA>() {@Overridepublic int compare(TestA o1, TestA o2) {//降序return o2.getAge().compareTo(o1.getAge());}});System.out.println("降序排序后--:"+list.toString());}}

输出的是啥:

附:本文大部分参考网上资源,主要用于个人的笔记心得记录

下面是个人在处理业务中的使用:

到了这里你觉得很神奇?错了,现在是java8的时代,我们来看看新特性下如何排序的:

List<CountCardDetailVo> all = new ArrayList<>();
//根据创建时间降序排序
all.sort(Comparator.comparing(CountCardDetailVo::getCreateTime).reversed());
//根据创建时间升序排序
all.sort(Comparator.comparing(CountCardDetailVo::getCreateTime));

对List集合中的对象进行按某个属性排序相关推荐

  1. 对List集合中每个对象元素按时间顺序排序

    首先创建一个实体类 package com.huawei.Test;import java.util.Date;/*** @author h84250472* @title: User$* @desc ...

  2. Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

    一个学生类的实体类 @Data public class Student {private Long id;private String name;private int age;private Do ...

  3. List集合中的对象根据属性排序

    List集合中的对象根据属性排序 集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List ...

  4. java同名变量在list中添加两次_去除集合中自定义对象的重复值(对象的成员变量值都相同)...

    package cn.itcast_04; import java.util.ArrayList; import java.util.Iterator; /* * 需求:去除集合中自定义对象的重复值( ...

  5. 如何在Javascript中访问对象的第一个属性?

    本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...

  6. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  7. 向集合中添加Person类型并对其排序

    package com.bjpowernode.t03sort; import java.util.ArrayList; import java.util.Collections; /* * 向集合中 ...

  8. 微信小程序更新二维数组中的对象或数组的属性值

    微信小程序更新二维数组中的对象或数组的属性值,这里可能有两种情况 1.微信小程序更新二维数组中的对象的属性值 更新二维数组中的某个对象的属性值,代码如下 js 代码 data: {familys:[{ ...

  9. java取出list中的对象的某一属性

    public class UserEntity implements Serializable {private Integer id;/*** 用户名*/private String userNam ...

最新文章

  1. Cordova webapp实战开发:(1)为什么选择 Cordova webapp?
  2. SPPNet网络结构
  3. [OC]数据库的使用--准备工作
  4. Linux 下安装和配置git
  5. 刷新器-Java EE 7后端十大功能
  6. 最可怕的八种黑客手段,网络攻击真是无孔不入!【转载】
  7. php 打印多维数组中的值,从多维数组php中提取值
  8. protel中PCB板大小的自定义方法
  9. 网站建设中HTML编写技巧你必须掌握的30个 提升你的编写能力|网站建设
  10. (day05)剑指 Offer 11. 旋转数组的最小数字-(二分法)
  11. 【SAS NOTES】数据输出-proc export
  12. 《智慧书》格言271-280
  13. win7下安装配置opengrok
  14. 2022版Maven教程 - 第六章 单一架构案例
  15. java中事件监听是什么意思_Java的事件监听器学习心得
  16. canvas--putImageData--(灰色滤镜、黑白滤镜、反色滤镜、模糊滤镜、马赛克滤镜)
  17. VMware VMotion迁移与原理
  18. 分布式系统架构之IDC机房
  19. 法线向量(用于贴图)
  20. JSONObject 与 JSONArray

热门文章

  1. 微信用户全局唯一标识_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...
  2. java 遍历二进制_读取二进制文件并循环遍历每个字节
  3. 使用mysql-proxy读写分离时的注意事项_mysql-proxy中Admin Plugin的使用以及读写分离的问题...
  4. Leetcode:5.longest-palindromic-substring(最长回文子串)
  5. pytorch的索引与切片
  6. Android调用相册、相机(兼容6.0、7.0、8.0)
  7. oracle增加网络服务,Oracle 配置监听和本地网络服务
  8. python 托盘_[宜配屋]听图阁
  9. 验证集准确率上不去_Python机器学习之“模型验证”
  10. sublime java 编译_03 sublime text3下配置Java的编译运行环境