【JAVA 8】 List 使用Lambda表达式操作对象字段进行升序、降序

/ Java / 0 条评论 / 2183 浏览

public static void main(String[] args) { // 初始化集合 List userList = new ArrayList(); 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);
});

}