List的排序主要通过两种方法:
1. 要排序的对象model实现Comparable接口
2. 自定义一个比较器,然后调用Collection的sort()方法
有一个核心点要明白,不管那种比较方式,其实都是调用了jre中已经存在的类型的比较方法。什么意思呢?假如有一个User类,我想按姓名排序,其实核心是调用了String的compare()方法。
明白了这一点之后,我们来看看这两种方法分别是怎么实现的。
1. model实现Comparable接口
public class User implements Comparable<User>{
private int id;
private String name;
private String password;// 这个字段暂时没用,先保留
private String amArrangement;
private String pmArrangement;
private boolean isTop;
//java bean 略
@Override
public int compareTo(@NonNull User user) {
return this.name.compareTo(user.getName());
// return user.getName().compareTo(this.name);//如果这样写顺序就会反过来
}
}
// 排序.注意是Collections不是Collection
Collections.sort(userList);
2. 使用比较器
public class StringComparator implements Comparator<User> {
@Override
public int compare(User user1, User user2) {
return user1.getName().compareTo(user2.getName());
}
}
// 排序
Collections.sort(userList, new StringComparator());
两种方法的比较
相对而言我更喜欢第二种方式,更加灵活,可以动态改变排序的方式,而第一种一旦写好之后就只有一种排序方式了。同时我个人认为排序的方式并不属于model应该完成的任务,第二种方式更加符合软件设计的责任链模式。
ps:从今天开始准备慢慢地把之前写在本地的博客整理修订一下,然后迁移到CSDN上来,给自己定个任务:每天一篇吧。
加油小伙子!~