java 排序
升序排序
list.sort(Comparator.comparing(Stu::getAge));
降序排序
list.sort(Comparator.comparing(Stu::getAge).reversed());
或者按以下写法
Collections.sort(list,Comparator.comparing(Stu::getAge));
再或者按以下写法
List<Stu> collect = list.stream().sorted(Comparator.comparing(Stu::getAge)).collect(Collectors.toList());
下面介绍下
Comparator
Comparable
这两个都是可以用来对java数据进行排序的接口。
1.Comparable 用法,内比较器,需要对象实现排序接口
/**
* @author xiangwei.li
* @version 1.0.0
* @date 2021/8/24
*/
public class Stu implements Comparable<Stu> {
private Long id;
private String name;
private Integer age;
private Date createDate;
@Override
public int compareTo(Stu o) {
return this.getAge()-o.getAge();
}
}
使用
Collections.sort(list);
2.Comparator 外比较器
public class StuComparator implements Comparator<Stu> {
@Override
public int compare(Stu o1, Stu o2) {
return o1.getAge()-o2.getAge();
}
}
使用
Collections.sort(list,new StuComparator());
如何决定升序或者降序,按下面的的来理解记忆
public int compareTo(Stu o) {
return this.age - o.age; // 比较年龄(年龄的升序)
}
应该理解成return (-1)×(this.age-o.age)计算机没有所谓的正序和逆序,他只管大还是小,你给他小的放前面,大的放后面,然后乘负一,整个顺序就反过来了
比如:this.age=23, o.age=24,那么:
this.age - o.age=-1 这样系统就认为this比o小,所以排在this排在前面,就是升序了;
如果写成 o.age - this.age 就相当于 -(this.age - o.age)=1,这样系统就认为this比o大了,所以this排在后面,就是降序了。
更明白的理解就是:
return this.age > o.age ? -1 : 1; 降序排列 等价于 return o.age - this.age
return this.age > o.age ? 1 : -1; 升序排列 等价于 return this.age - o.age

浙公网安备 33010602011771号