Saltar al contenido

Ordenando una lista con stream.sorted() en Java

Necesitamos tu ayuda para compartir nuestros enunciados con relación a las ciencias de la computación.

Solución:

esto no es como Collections.sort() donde se ordena la referencia del parámetro. En este caso, solo obtiene una secuencia ordenada que necesita recopilar y asignar a otra variable eventualmente:

List result = list.stream().sorted((o1, o2)->o1.getItem().getValue().
                                   compareTo(o2.getItem().getValue())).
                                   collect(Collectors.toList());

Acabas de perder asignar el resultado

Utilizar list.sort en lugar de:

list.sort((o1, o2) -> o1.getItem().getValue().compareTo(o2.getItem().getValue()));

y hacerlo más sucinto usando Comparator.comparing:

list.sort(Comparator.comparing(o -> o.getItem().getValue()));

Después de cualquiera de estos, list en sí mismo será ordenado.

tu problema es ese
list.stream.sorteddevoluciones los datos ordenados, no se ordenan en el lugar que esperaba.

Java 8 proporciona diferentes métodos de api de utilidad para ayudarnos a clasificar mejor los flujos.

Si su lista es una lista de enteros (o doble, largo, cadena, etc.), simplemente puede ordenar la lista con los comparadores predeterminados proporcionados por Java.

List 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 pasó 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 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 los métodos compareDouble(), compareInt()):

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 encadenar 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;
    

Aquí tienes las comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *