Java 8 udostępnia różne narzędzia API, które pomagają nam lepiej sortować strumienie.
Jeśli Twoja lista jest listą liczb całkowitych (lub podwójną, długą, ciągową itp.), Możesz po prostu posortować listę za pomocą domyślnych komparatorów dostarczonych przez java.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Tworzenie komparatora w locie:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Z domyślnym komparatorem udostępnianym przez java 8, gdy żaden argument nie został przekazany do funkcji sort ():
integerList.stream().sorted().forEach(System.out::println);
Jeśli chcesz posortować tę samą listę w odwrotnej kolejności:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
Jeśli Twoja lista jest listą obiektów zdefiniowanych przez użytkownika, to:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Tworzenie komparatora w locie:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Korzystanie z metody Comparator.comparingLong () (mamy też metody comparingDouble (), comparingInt ()):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Korzystanie z metody Comparator.comparing () (metoda Generic, która porównuje na podstawie dostarczonej metody pobierającej):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Możemy też zrobić łańcuch przy użyciu metody thenComparing ():
personList.stream().sorted(Comparator.comparing(Person::getPersonId).thenComparing(Person::getAge)).forEach(person -> System.out.println(person.getName()));
Klasa osoby
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()));było dla mnie nowe. Świetny!