Ordenar listas en java

Ordenación de colecciones en Java

Nota: Un ArrayList en java puede almacenar los elementos de una manera no ordenada, no en orden ascendente o descendente, pero sólo index-wise. Así que aquí, en este artículo, vamos a aprender cómo podemos ordenar un ArrayList en java, para organizar los elementos en un ArrayList en orden ascendente o descendente.

En Java, hay un marco de colección que proporciona interfaces como List, Set, Stack, Queue, etc, y también clases como LinkedList, ArrayList, etc en el que múltiples elementos u objetos pueden ser almacenados. Normalmente, los elementos se almacenan sin ordenar. Para ordenar los datos utilizamos diferentes métodos. Un ArrayList se puede ordenar de dos formas ascendente o descendente. Principalmente la clase collections proporciona dos métodos para ordenar un ArrayList en Java en orden ascendente o descendente.

Collections.sort() MethodUsando el método sort() de la clase collections podemos ordenar ArrayList en orden ascendente en java. Básicamente, toma los elementos de ArrayList como parámetros y los ordena en orden ascendente, y devuelve un ArrayList ordenado en orden ascendente, con respecto al orden original de sus elementos.Veamos ahora la sintaxis del método Collections.sort() en java.

Java ordenar lista ascendente

Ordenar una Lista de Objetos por CampoAsí que tenemos una lista de usuarios y queremos ordenarlos por createdDate.  Vamos a ver varios enfoques diferentes y explorar los beneficios y limitaciones de cada uno.  Opción 1: Collections.sort() con ComparablePodemos utilizar la interfaz Comparable para definir los criterios de ordenación por defecto de una clase.      Esto requiere implementar el método compareTo() como se ve en las líneas 20-26:

  Funciones reguladoras en JavaScript: cómo limitar el número de veces que se puede llamar a una función cada segundo (debouncing)

Esta opción requiere modificar nuestra clase y definir un orden por defecto (o natural).  Esta opción no permite ordenar por un campo distinto al que hemos elegido.Opción 2: Collections.sort() con comparador En lugar de modificar nuestra clase, podemos pasar un comparador a Collections.sort().    Los siguientes ejemplos crean un comparador utilizando una clase anónima.  Ordenar por fecha de creación ascendente

Esta opción permite que el código fuera de la clase dicte los criterios de ordenación y el orden.  Sin embargo, requiere una fea clase anónima que no es muy legible.Opción 3: Interfaz List sort() [Java 8]Java 8 introdujo un método de ordenación en la interfaz List que puede utilizar un comparador.El método Comparator.comparing() acepta una referencia a un método que sirve como base de la comparación.    Así que pasamos User::getCreatedOn para ordenar por el campo createdOn.  Ordenar por fecha de creación ascendente

Comparador Java de listas

Uso de Comparator con List.sort()La interfaz comparator proporciona el marco para comparar diferentes objetos comparables. El método List.sort(Comparator<? super T> c) toma un comparador como argumento, y devolverá un array ordenado basado en el orden del comparador especificado:import java.util.ArrayList;

  Visual studio code javascript

Este método de la clase List es prácticamente idéntico a la implementación de la clase Collections, por lo que el orden puede cambiarse con cualquier comparador que reciba como argumento.Using a Stream ObjectTambién puedes utilizar el método List.stream() para ordenar tu lista. Este método devolverá un objeto Stream secuencial que contiene los valores de la lista. A continuación, puede utilizar el método Stream.sorted(Comparator<? super T> c) para ordenar su lista basándose en un comparador proporcionado. A continuación, tendrá que convertir el objeto Stream de nuevo en un List.import java.util.ArrayList;

Java ordenar lista descendente

El uso de una lambda es posible porque la interfaz Comparator sólo tiene un único método que implementar, por lo que la VM puede inferir qué método está implementando. Como los tipos de los parámetros pueden deducirse, no es necesario indicarlos (por ejemplo, (a, b) en lugar de (Double a, Double b)). Y como el cuerpo de la lambda sólo tiene una línea, y se espera que el método devuelva un valor, el retorno se infiere y no son necesarias las llaves.

Y entonces se puede volver a utilizar Colection.sort(list) ya que ahora la lista contiene objetos de tipo Comparable y se puede ordenar. El orden depende del método compareTo. Consulta este https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html para obtener información más detallada.

  Php str_replace

Collections.sort te permite pasar una instancia de un Comparator que define la lógica de ordenación. Así, en lugar de ordenar la lista en orden natural y luego invertirlo, uno puede simplemente pasar Collections.reverseOrder() a sort para ordenar la lista en orden inverso:

Como menciona @Marco13, aparte de ser más idiomático (y posiblemente más eficiente), usar el comparador de orden inverso asegura que la ordenación sea estable (lo que significa que no se cambiará el orden de los elementos cuando sean iguales según el comparador, mientras que al invertir se cambiará el orden)

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad