列表排序方式¶
编写代码时难免会遇到列表排序的需求,一般上讲列表排序可以有如下4种方法实现:
一、简单排序¶
用于列表仅存储如 int 的简单数据的情况
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(3));
list.add(new Integer(14));
list.add(new Integer(6));
list.add(new Integer(10));
// 简单的int类似数据,可以使用Collections的sort方法即可完成排序
Collections.sort(list);
System.out.println(list.toString());
}
}
二、实现 Comparable 并重写 compareTo 方法¶
用于有复杂排序逻辑的场合,一般可以在 compareTo() 方法中放入更多的比较条件
@Override
public int compareTo(User user) {
// 重写Comparable接口的compareTo方法,根据年龄升序排列,降序修改相减顺序即可
// 你也可以实现更复杂的比较逻辑,如将各项排序因子统计成一个具体的值用以排序等
return this.age - user.getAge();
}
三、 匿名内部类¶
本质上与方法二类似
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("张三", 5));
list.add(new User("李四", 30));
list.add(new User("王五", 19));
list.add(new User("王麻子", 17));
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
int diff = u1.getAge() - u2.getAge();
if (diff > 0) {
return 1;
}else if (diff < 0) {
return -1;
}
return 0; //相等为0
}
}); // 按年龄排序
System.out.println(list.toString());
}
}
四、方法引用¶
适用于比较逻辑复杂程度介于方法一和方法二之间的排序,同时也是最为通用的排序方法
List<Video> videoList = videoService.list(videoWrapper);
// 根据sort字段进行排序
videoList.sort(Comparator.comparing(Video::getSort));