一、如何使用Collections工具类进行排序

使用Collections工具类进行排序主要有两种方式:

1.对象实现Comparable接口,重写compareTo方法

/**
* @author Hanstrovsky
*/
@Data
@AllArgsConstructor
public class Student implements Comparable {
String name;
int age; @Override
public int compareTo(Object o) {
Student stu = (Student) o;
//this-参数:升序;参数-this:降序
return this.age - stu.age;
}
}
/**
* @author Hanstrovsky
*/
public class Test01 {
public static void main(String[] args) { List<Student> stuList = new ArrayList<>();
stuList.add(new Student("abc", 17));
stuList.add(new Student("cab", 18)); Collections.sort(stuList);
System.out.println(stuList);
}
}

2.传入一个比较器对象Comparator。

还是用上面的student,不去实现Comparable接口。

/**
* @author Hanstrovsky
*/
public class Test02 {
public static void main(String[] args) {
List<Student> stuList = new ArrayList<>();
stuList.add(new Student("abc", 19));
stuList.add(new Student("cab", 18)); Collections.sort(stuList, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.age - o2.age;
}
});
System.out.println(stuList);
}
}

二、依据多个字段排序

当需求要求先按第一个字段排序,如果第一个字段相同,则按第二个字段排序,如果第二个相同,则按第三个字段... 可以定义多个Comparator,并依次使用。

/**
* @author Hanstrovsky
*/
@Data
@AllArgsConstructor
public class Student {
// 编号
private String id;
// 身高
private int height;
// 体重
private int weight;
}
/**
* @author Hanstrovsky
*/
public class Test03 {
public static void main(String[] args) {
Student s1 = new Student("1", 180, 80);
Student s2 = new Student("2", 175, 80);
Student s3 = new Student("3", 175, 90); List<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);
students.add(s3);
System.out.println("原始排序:" + students); //按照身高升序排序
Comparator<Student> byHeight = Comparator.comparing(Student::getHeight);
//按照体重升序排序
Comparator<Student> byWeight = Comparator.comparing(Student::getWeight); //将list先按照"身高"升序再按照"体重"升序排列
students.sort(byHeight.thenComparing(byWeight));
//将list先按照"身高"升序再按照"体重"升序排列
System.out.println("优先身高:" + students); //将list先按照"体重"升序再按照"身高"升序排列
students.sort(byWeight.thenComparing(byHeight));
//将list先按照"身高"升序再按照"体重"升序排列
System.out.println("优先体重:" + students);
}
}

在Java中使用Collections.sort 依据多个字段排序的更多相关文章

  1. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  2. Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序

    在List的排序中常用的是Collections.sort()方法,可以对String类型和Integer类型泛型的List集合进行排序. 首先演示sort()方法对Integer类型泛型的List排 ...

  3. Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

    Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...

  4. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

  5. Java中的Collections类

    转载:https://blog.csdn.net/yangxingpa/article/details/80515963 从[Java]Java中的Collections类——Java中升级版的数据结 ...

  6. java中List对象列表去重或取出以及排序

    面试碰到几次list的去重和排序.下面介绍一种做法: 1. list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是 ...

  7. java中的TreeMap如何顺序按照插入顺序排序

    java中的TreeMap如何顺序按照插入顺序排序 你可以使用LinkedHashMap  这个是可以记住插入顺序的. 用LinkedHashMap吧.它内部有一个链表,保持插入的顺序.迭代的时候,也 ...

  8. 用Java集合中的Collections.sort方法对list排序的两种方法

    用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  9. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

随机推荐

  1. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-完整的测试类,含依赖测试(15)

    ddt.依赖测试.断言.测试数据写回 # -*- coding: utf-8 -*- # @Time : 2020/2/12 23:07 # @File : test_class_15.py # @A ...

  2. DB2数据库多行一列转换成 一行一列

    在db2中遇到多行一列转为一行一列的需求时,用db2函数 LISTAGG可以实现该功能.语法如下: SELECT   [分组的字段 ] , LISTAGG([需要聚合的字段名], ',')   FRO ...

  3. 关于前端使用JavaScript无法实现canvas打印问题的解决

    当使用浏览器的打印功能window.print()无法打印网页上的canvas图像,但是可以通过转换canvas成一个图片的形式来实现canvas的打印. 解决方法 getElementById获取c ...

  4. <JZOJ5913>林下风气

    快乐dp 反正考场写挂 #include<cstdio> #include<cstring> #include<cctype> #include<iostre ...

  5. ES6的模块暴露与模块引入

    ES6的模块暴露和引入可以让我们实现模块化编程,以下列出ES6的几种模块暴露与引入的方式与区别. 1.ES6一共有三种模块暴露方法 多行暴露 模块1:module1.js //多行暴露 export ...

  6. toString()和强制类型转换(String)的用法

    原来是String类型的才可以强转到String,不然会报 ClassCastException异常: 所有的引用类型都从Object类继承了toString方法.

  7. Java多态详解

    package QianFeng02; //多态 public class Polymorphic { public static void main(String[] args){ // HomeC ...

  8. springboot 多数据源之错误 HikariPool-1 - jdbcUrl is required with driverClassName.

    数据源连接报错: 之前在1.5.7的版本的时候用该数据源配置没问题,看如下所示 springboot1.5.7配置多数据源: datasource.master.url=jdbc:mysql://lo ...

  9. Flask admin Flask login 整合模板

    项目地址: https://github.com/WES6/supflask Flask admin 官方文档: https://flask-admin.readthedocs.io/en/lates ...

  10. DJI大疆创新招聘-自动化测试工程师

    工作地点:深圳 简历发送:sue.li@dji.com 工作职责: 1. 参与自动化测试的设计和开发,参与需求分析和评审,评估合理性和完备性: 任职资格: 1. 本科及以上学历,计算机或软件工程相关专 ...