Java 8 cung cấp các phương thức api tiện ích khác nhau để giúp chúng tôi sắp xếp các luồng tốt hơn.
Nếu danh sách của bạn là danh sách Số nguyên (hoặc Đôi, Dài, Chuỗi, v.v.) thì bạn có thể chỉ cần sắp xếp danh sách bằng các bộ so sánh mặc định do java cung cấp.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Đang tạo bộ so sánh:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Với bộ so sánh mặc định được cung cấp bởi java 8 khi không có đối số nào được truyền đến sorted ():
integerList.stream().sorted().forEach(System.out::println); //Natural order
Nếu bạn muốn sắp xếp cùng một danh sách theo thứ tự ngược lại:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); // Reverse Order
Nếu danh sách của bạn là danh sách các đối tượng do người dùng xác định, thì:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Đang tạo bộ so sánh:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Sử dụng phương thức Comparator.comparingLong () (Chúng tôi cũng có các phương thức CompareDouble (), CompareInt ()):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Sử dụng phương thức Comparator.comparing () (Phương thức chung so sánh dựa trên phương thức getter được cung cấp):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Chúng ta cũng có thể thực hiện chuỗi bằng cách sử dụng phương thức thenComparing ():
personList.stream().sorted(Comparator.comparing(Person::getPersonId).thenComparing(Person::getAge)).forEach(person -> System.out.println(person.getName())); //Sorting by person id and then by age.
Hạng người
public class Person {
private long personId;
private String name;
private int age;
private double salary;
public long getPersonId() {
return personId;
}
public void setPersonId(long personId) {
this.personId = personId;
}
public Person(long personId, String name, int age, double salary) {
this.personId = personId;
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
list.sort(Comparator.comparing(o -> o.getItem().getValue()));
là mới đối với tôi. Tuyệt quá!