java8 的排序有两种
- 使用sorted方法排序 :
- 使用sort方法排序
区别直接看代码
public class Main {
public static void main(String[] args) {
//创建Users
List<User> users = createUsers();
//排序 方式一 使用sorted排序 调用该方法后users依然无序,返回一个有序的sortUsers
List<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(
//先比较Date
Comparator.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(
//先比较Date
Comparator.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
}