需求:根据用户名称字典序排序
List<User> us = new ArrayList<>();
us.add(new User(3L, "", 13, "org3"));
us.add(new User(2L, "abc2", 12, "org2"));
us.add(new User(4L, "", 14, "org4"));
us.add(new User(1L, "abc1", 11, "org1"));
// 写法一
us.sort((o1, o2) -> o2.getName().compareTo(o1.getName()));
// 写法二
Collections.sort(us, Comparator.comparing(User::getName).reversed());
// 写法三 这是Java8版本以下写法,有Bug,有时会报错,有时排序结果不正确
Collections.sort(us, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// 报错信息:Comparison method violates its general contract!)
return o1.getName().compareTo(o2.getName());
}
});
us.forEach(o -> System.out.println(o));
打印结果:
User [name=abc2, age=12, org=org2]
User [name=abc1, age=11, org=org1]
User [name=, age=13, org=org3]
User [name=, age=14, org=org4]