java8 的排序有两种
- 使用sorted方法排序 :
- 使用sort方法排序
区别直接看代码
public class Main {public static void main(String[] args) {//创建UsersList<User> users = createUsers();//排序 方式一 使用sorted排序 调用该方法后users依然无序,返回一个有序的sortUsersList<User> sortUsers = sort_1(users);//将List输出打印soutList(sortUsers);System.out.println("~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~");//排序方式二 使用sort排序 没有返回值,调用该方法后users有序sort_2(users);//打印soutList(users);}/*** sorted方法排序 并不会改变原来的list(原list依然无序),而是返回一个排好序的新List* @param users* @return*/private static List<User> sort_1(List<User> users) {return users.stream().sorted(//先比较DateComparator.comparing(User::getDate, (d1, d2) -> d1.compareTo(d2)//再比较age,下面两种方法都一样).thenComparing(User::getAge, (x, y) -> Integer.parseInt(x) - Integer.parseInt(y))// Comparator.comparingInt(x->Integer.parseInt(x.getAge()))).collect(Collectors.toList());}/*** sort该方法排序 该方法没有返回值,直接将原list排序* @param users*/private static void sort_2(List<User> users) {users.sort(//先比较DateComparator.comparing(User::getDate, (d1, d2) -> d1.compareTo(d2)//再比较age,下面两种方法都可以).thenComparing(User::getAge, (x, y) -> Integer.parseInt(x) - Integer.parseInt(y))// Comparator.comparingInt(x->Integer.parseInt(x.getAge())));}//打印private static void soutList(List<User> sortUsers) {sortUsers.forEach(x -> System.out.println(x));}private static List<User> createUsers() {return Arrays.asList(new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "1"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "10"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "2"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "3"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "30"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "4"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "40"), new User(LocalDate.parse("2020-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")), "51"));}}
User实体类
public class User {private LocalDate date;private String age;//getter ,setter ,toString
}