Guía y comprobaciones
Orden natural y lista modificable
List.sort ordena la propia lista. Si la lista no permite modificaciones, la operación puede lanzar una excepción. Copiar los valores a un ArrayList deja clara la intención de obtener una versión ordenada independiente.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Ejemplo {
public static void main(String[] args) {
List<Integer> original = List.of(7, 2, 5);
List<Integer> ordenada = new ArrayList<>(original);
ordenada.sort(Comparator.naturalOrder());
System.out.println(ordenada); // [2, 5, 7]
System.out.println(original); // [7, 2, 5]
ordenada.sort(Comparator.reverseOrder());
System.out.println(ordenada); // [7, 5, 2]
}
}
Un criterio y un desempate
Para ordenar textos por longitud, un comparador puede extraer esa longitud. Si te importa el resultado entre textos igual de largos, añade un segundo criterio.
List<String> nombres = new ArrayList<>(List.of("Luis", "Ana", "Eva"));
nombres.sort(Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder()));
System.out.println(nombres); // [Ana, Eva, Luis]
El orden natural de String no representa automáticamente la ordenación lingüística que espera una persona en todos los idiomas. Para catálogos con reglas locales, estudia Collator y define cómo tratar mayúsculas y acentos.
Evita restar para comparar
Un comparador numérico que devuelve a - b puede desbordar. Utiliza los comparadores de tipos o Comparator.comparingInt para expresar el campo. Si hay valores nulos, decide si se rechazan o dónde se sitúan mediante un comparador preparado para ello.
Copia de lista, no de cada objeto
new ArrayList<>(original) crea otra lista, pero los objetos contenidos pueden seguir compartidos. Ordenar la copia no cambia el orden del original; modificar un objeto de la copia puede verse desde ambos.
Comprueba una lista vacía, un elemento, duplicados y varios empates. Si la selección debe mostrar los primeros resultados, aplica la misma regla de desempate cada vez para evitar que elementos equivalentes parezcan saltar de posición.
Preguntas frecuentes
¿Puedo ordenar directamente List.of?
List.of crea una lista no modificable. Para ordenarla en sitio, crea antes una lista modificable como ArrayList.
¿sort devuelve otra lista?
No. Modifica la lista sobre la que se invoca; crea una copia si necesitas conservar el orden anterior.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.