Java 8 bietet verschiedene API-Methoden für Dienstprogramme, mit denen wir die Streams besser sortieren können.
Wenn Ihre Liste eine Liste von Ganzzahlen (oder Double, Long, String usw.) ist, können Sie die Liste einfach mit den von Java bereitgestellten Standardkomparatoren sortieren.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Komparator im laufenden Betrieb erstellen:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Mit dem von Java 8 bereitgestellten Standardkomparator, wenn kein Argument an sorted () übergeben wurde:
integerList.stream().sorted().forEach(System.out::println); //Natural order
Wenn Sie dieselbe Liste in umgekehrter Reihenfolge sortieren möchten:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); // Reverse Order
Wenn Ihre Liste eine Liste benutzerdefinierter Objekte ist, dann:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Komparator im laufenden Betrieb erstellen:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Verwenden der Comparator.comparingLong () -Methode (Wir haben compareDouble (), compareInt () -Methoden auch):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Verwenden der Comparator.comparing () -Methode (generische Methode, die anhand der bereitgestellten Getter-Methode vergleicht):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Mit der thenComparing () -Methode können wir auch verketten:
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.
Personenklasse
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()));
war neu für mich. Toll!