Java 8 proporciona diferentes métodos api de utilidad para ayudarnos a ordenar mejor los flujos.
Si su lista es una lista de enteros (o dobles, largos, de cadena, etc.), simplemente puede ordenar la lista con los comparadores predeterminados proporcionados por java.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Creando comparador sobre la marcha:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Con el comparador predeterminado proporcionado por java 8 cuando no se pasa ningún argumento a sorted ():
integerList.stream().sorted().forEach(System.out::println); //Natural order
Si desea ordenar la misma lista en orden inverso:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); // Reverse Order
Si su lista es una lista de objetos definidos por el usuario, entonces:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Creando comparador sobre la marcha:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Usando el método Comparator.comparingLong () (también tenemos métodos comparingDouble (), comparingInt ()):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Usando el método Comparator.comparing () (método genérico que compara según el método getter proporcionado):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
También podemos hacer encadenamiento usando el método 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.
Clase de persona
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()));
era nuevo para mi. ¡Excelente!