在Java中使用Collections.sort 依据多个字段排序
一、如何使用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 依据多个字段排序的更多相关文章
- python 中的sort 和java中的Collections.sort()函数的使用
x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
- Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序
在List的排序中常用的是Collections.sort()方法,可以对String类型和Integer类型泛型的List集合进行排序. 首先演示sort()方法对Integer类型泛型的List排 ...
- Java—集合框架 Collections.sort()、Comparable接口和Comparator接口
Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...
- 【Java】Java中的Collections类——Java中升级版的数据结构【转】
一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...
- Java中的Collections类
转载:https://blog.csdn.net/yangxingpa/article/details/80515963 从[Java]Java中的Collections类——Java中升级版的数据结 ...
- java中List对象列表去重或取出以及排序
面试碰到几次list的去重和排序.下面介绍一种做法: 1. list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是 ...
- java中的TreeMap如何顺序按照插入顺序排序
java中的TreeMap如何顺序按照插入顺序排序 你可以使用LinkedHashMap 这个是可以记住插入顺序的. 用LinkedHashMap吧.它内部有一个链表,保持插入的顺序.迭代的时候,也 ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Java中Map<Key, Value>存储结构根据值排序(sort by values)
需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...
随机推荐
- the Uneducated are|anymore|that| so as to |die from|die of|
定冠词加上某些形容词可以泛指一类人,谓语动词一般用复数形式,the uneducated泛指未受过教育的人, the Uneducated are more to be pitied than bla ...
- linux上hosts文件如何配置
linux上hosts文件如何配置 一.什么是host Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登 ...
- 吴裕雄--天生自然HTML学习笔记:HTML <head>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- sql执行过程
作为一个程序员,几乎所有人都使用过 SQL 语言,无论是在命令行执行.程序调用,还是在 SQL 工具里,你都做过这样的事:写一个规范的 SQL 语句,然后等待数据库返回的结果,然后再基于结果做各种逻辑 ...
- Css兼容性大全
知识有所欠缺 疯狂脑补抄袭经验中... 兼容性处理要点1.DOCTYPE 影响 CSS 处理 2.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, ...
- Jenkins之邮件通知
Jenkins默认有一个邮件通知功能,但功能比较单一,能自定义的东西很少,一般使用Extended E-mail Notification插件来发送邮件,EXT Email插件功能比较多,但设置也比较 ...
- Python Web 基础向(四) 浅谈数据层
数据层一般会给人带来一些困扰,在于其定位不准确.聚合Model的工作也可以放在逻辑层做,但会导致逻辑层变重,经常出现大段晦涩代码.因此我的建议是保留Model聚合层,尽管会导致工作量的略微增加,但却可 ...
- 【转载】[基础知识]【网络编程】TCP/IP
转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops 胖友们楼主我又 ...
- 组合数学之Pólya计数理论
1 群 群$(G, cdot)$: 闭合, 结合律, 幺元, 逆 1.1 置换群 置换为双射$pi:[n]to [n]$, 置换之间的操作符 $cdot$ 定义为函数的复合, 即$(pi cdot s ...
- etcd安装部署步骤
我是通过yum直接安装的(yum install etcd -y),其生成的配置文件在/etc/etcd/etcd.conf. 这里分单机版和集群版来介绍配置项 单机配置 ETCD_DATA_DIR: ...