0.简介
Comparable和Comparator都用于同种类型对象比较,集合排序
1.Comparator
@AllArgsConstructor
@ToString
public class User {
@Setter @Getter
private String name;
@Setter @Getter
private Integer age;
}
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User("a", 12));
userList.add(new User("b", 12));
userList.add(new User("c", 20));
userList.add(new User("d", 2));
// 升序
Collections.sort(userList, Comparator.comparingInt(User::getAge));
System.out.println(userList.toString());
// 降序
Collections.sort(userList, (user1, user2) -> user2.getAge() - user1.getAge());
System.out.println(userList.toString());
}
2.Comparable
// 升序
@AllArgsConstructor
@ToString
public class UserAsc implements Comparable<UserAsc> {
@Setter @Getter
private String name;
@Setter @Getter
private Integer age;
@Override
public int compareTo(UserAsc userAsc) {
return this.age - userAsc.getAge();
}
}
public static void main(String[] args) {
List<UserAsc> userAscList = new ArrayList<>();
userAscList.add(new UserAsc("a", 12));
userAscList.add(new UserAsc("b", 12));
userAscList.add(new UserAsc("c", 20));
userAscList.add(new UserAsc("d", 2));
Collections.sort(userAscList);
System.out.println(userAscList.toString());
}
// 降序
@AllArgsConstructor
@ToString
public class UserDesc implements Comparable<UserDesc> {
@Setter @Getter
private String name;
@Setter @Getter
private Integer age;
@Override
public int compareTo(UserDesc userAsc) {
return userAsc.getAge() - this.age;
}
}
public static void main(String[] args) {
List<UserDesc> userDescList = new ArrayList<>();
userDescList.add(new UserDesc("a", 12));
userDescList.add(new UserDesc("b", 12));
userDescList.add(new UserDesc("c", 20));
userDescList.add(new UserDesc("d", 2));
// desc
Collections.sort(userDescList);
System.out.println(userDescList.toString());
}