Java 8 fournit différentes méthodes API utilitaires pour nous aider à mieux trier les flux.
Si votre liste est une liste d'entiers (ou Double, Long, Chaîne, etc.), vous pouvez simplement trier la liste avec les comparateurs par défaut fournis par java.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Création d'un comparateur à la volée:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Avec le comparateur par défaut fourni par java 8 quand aucun argument n'est passé à sorted ():
integerList.stream().sorted().forEach(System.out::println); //Natural order
Si vous souhaitez trier la même liste dans l'ordre inverse:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); // Reverse Order
Si votre liste est une liste d'objets définis par l'utilisateur, alors:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Création d'un comparateur à la volée:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Utilisation de la méthode Comparator.comparingLong () (Nous avons aussi les méthodes compareDouble (), compareInt ()):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Utilisation de la méthode Comparator.comparing () (méthode générique qui compare en fonction de la méthode getter fournie):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Nous pouvons également faire du chaînage en utilisant la méthode 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.
Classe de personne
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()));
était nouveau pour moi. Génial!