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  

posted @ 2021-11-08 14:12  qiushui  阅读(40)  评论(0)    收藏  举报