【JAVA 8】 List 使用Lambda表达式操作对象字段进行升序、降序
warning:
这篇文章距离上次修改已过602天,其中的内容可能已经有所变动。
public static void main(String[] args) {
// 初始化集合
List<User> userList = new ArrayList<User>();
Random random = new Random();
for (int i = 0; i < 15; i++) {
userList.add(new User(
random.nextInt(100),
"user" + i,
new Date(System.currentTimeMillis() - random.nextInt(100))));
}
// 原集合
System.out.println("------userList------");
userList.forEach((user) -> {
System.out.println(user);
});
// 升序
System.out.println("------ascByBirthdayList------");
List<User> ascByBirthdayList = userList.stream().sorted().collect(Collectors.toList());
ascByBirthdayList.forEach((user) -> {
System.out.println(user);
});
// 降序 --> 注意是在 ascByBirthdayList 的基础上,将 ascByBirthdayList 集合反转,更容易理解
System.out.println("------descByBirthdayList------");
List<User> descByBirthdayList = ascByBirthdayList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
descByBirthdayList.forEach(user -> {
System.out.println(user);
});
// 升序
System.out.println("------ascByIdList------");
List<User> ascByIdList = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
ascByIdList.forEach(user -> {
System.out.println(user);
});
/*
降序 --> 注意这里不能在 ascByIdList 的基础上,将 ascByIdList 集合反转
如果这里仅仅使用 ascByIdList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
那么得到的结果和 descByBirthdayList 是一致的, 因为没有指明排序的字段,默认是按birthday来排序的
*/
System.out.println("------descByIdList------");
List<User> descByIdList = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
descByIdList.forEach(user -> {
System.out.println(user);
});
}