list的sort方法,以及thenComparing方法遇到的问题
最近使用 list的sort方法和thenComparing方法以及reversed方法,发现最终排序方式和我想的有些出入,特此记录
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private Integer age;
private Integer num;
}
public class 连续排序 {
public static void main(String[] args) {
User user1 = new User(1,8, 21);
User user2 = new User(2,8, 22);
User user5 = new User(2,8, 23);
User user3 = new User(3,9, 21);
User user4 = new User(4,10, 22);
ArrayList<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
//1自然顺序
System.out.println(list);
//2年龄从小到大,年龄一样,数目从小到大
list.sort(Comparator.comparing(User::getAge).thenComparing(User::getNum));
System.out.println(list);
//3年龄从大到小,年龄一样,数目从小到大
list.sort(Comparator.comparing(User::getAge).reversed().thenComparing(User::getNum));
System.out.println(list);
//4年龄从大到小,年龄一样,数目从大到小
list.sort(Comparator.comparing(User::getAge).thenComparing(User::getNum).reversed());
System.out.println(list);
//5年龄从小到大,年龄一样,数目从大到小
list.sort(Comparator.comparing(User::getAge).reversed().thenComparing(User::getNum).reversed());
System.out.println(list);
}
}
结果
[User(id=1, age=8, num=21), User(id=2, age=8, num=22), User(id=4, age=9, num=21), User(id=5, age=10, num=22), User(id=3, age=8, num=23)]
[User(id=1, age=8, num=21), User(id=2, age=8, num=22), User(id=3, age=8, num=23), User(id=4, age=9, num=21), User(id=5, age=10, num=22)]
[User(id=5, age=10, num=22), User(id=4, age=9, num=21), User(id=1, age=8, num=21), User(id=2, age=8, num=22), User(id=3, age=8, num=23)]
[User(id=5, age=10, num=22), User(id=4, age=9, num=21), User(id=3, age=8, num=23), User(id=2, age=8, num=22), User(id=1, age=8, num=21)]
[User(id=3, age=8, num=23), User(id=2, age=8, num=22), User(id=1, age=8, num=21), User(id=4, age=9, num=21), User(id=5, age=10, num=22)]