Artículos de Tecnología

Ordenar una lista de objetos en Java

Alex Felipe
Alex Felipe
Capa - Un top 4 con alumnos y sus respectivas puntuaciones: Guilherme Silveira - 23.143. Maurício Aniche - 19.930. Rodrigo Turini - 13.500. Alex Felipe - 13.450.

Concluyendo otro curso, ¡alcanzaré el top 3 de Alura!

Guilherme Silveira - 23.143. 
Maurício Aniche - 19.930. 
Rodrigo Turini - 13.500. 
Alex Felipe - 13.450.

Para calcular la información de los puntos, utilizamos la clase Alumno:

public class Alumno { 
    private final String nombre; 
    private int puntos; 
    public Alumno(String nombre, int puntos) {
        this.nombre = nombre;
        this.puntos = puntos;
    } 
    //métodos 
}

Entonces vamos a crear a nuestros alumnos:

Alumno alumno1 = new Alumno("Alex Felipe", 13450); 
Alumno alumno2 = new Alumno("Maurício Aniche", 19930); 
Alumno alumno3 = new Alumno("Guilherme Silveira", 23143); 
Alumno alumno4 = new Alumno("Rodrigo Turini", 13500);

Ahora necesitamos una List para almacenar estos alumnos:

List<Alumno> alumnos = new ArrayList<Alumno>(); 
alumnos.add(alumno1); 
alumnos.add(alumno2); 
alumnos.add(alumno3); 
alumnos.add(alumno4);

Probemos nuestra lista:

System.out.println(alumnos);

Resultado:

\[Alex Felipe - 13450, Maurício Aniche - 19930, Guilherme Silveira - 23143, Rodrigo Turini - 13500\]

¡Listo! Tengo mi List con los alumnos. Ahora vamos a ordenarla con el método estático sort() de la clase Collections().

Collections.sort(alumnos);

Espera un momento... ¿Mi código no compila? El problema es que el método sort() no sabe cómo ordenar un alumno, o sea, no sabe qué parámetro o criterio debe utilizar para comparar alumnos. Sin embargo, podemos informarle esto implementando la interfaz Comparable en la clase Alumno:

public class Alumno implements Comparable<Alumno> { 
    //atributos y métodos 
    @Override public int compareTo(Alumno otroAlumno) { 
        //implementación
    }
 }

Cuando implementamos la interfaz Comparable, necesitamos llenar el campo de generics_ con el tipo de objeto que queremos comparar, en este caso, queremos comparar objetos de tipo Alumno. Por último, necesitamos implementar el método compareTo().

La regla de ordenación utilizando el método compareTo() compara dos objetos (alumnos) y funciona de la siguiente manera:

En nuestro ejemplo:

@Override public int compareTo(Alumno otroAlumno) {
     if (this.puntos > otroAlumno.getPuntos()) {
        return -1; 
     } 
     if (this.puntos < otroAlumno.getPuntos()) {
        return 1; 
     } 
     return 0; 
}

Indicamos que si los puntos del alumno son mayores, muévalo más a la izquierda (-1), si son menores, muévalo a la derecha (1) y si los alumnos son iguales, no haga nada (0).

Después de implementar Comparable, ¡nuestro código compila! Vamos a probarlo:

Collections.sort(alumnos); 
System.out.println(alumnos);

Resultado:

[Guilherme Silveira - 23143, Maurício Aniche - 19930, Rodrigo Turini - 13500, Alex Felipe - 13450]

¡Observa que ahora nuestros alumnos están ordenados!

A diferencia de ordenar números, para ordenar listas de objetos específicos, como en el caso del objeto alumno, es necesario especificar cómo se debe ordenar el objeto implementando la interfaz Comparable y su método compareTo().

¿Qué opinas de la técnica para ordenar una lista en Java? ¡Echa un vistazo a nuestra Formación Java, que se centra en presentar el mundo Java en general, genial, ¿verdad? ;)

foto-autor

Alex Felipe

Alex es instructor y desarrollador con experiencia en Java, Kotlin, Android. Creador de más de 40 cursos, como Kotlin, Flutter, Android, persistencia de datos, comunicación con Web API, personalización de pantalla, pruebas automatizadas, arquitectura de Apps y Firebase. Es experto en Programación Orientada a Objetos, siempre con el objetivo de compartir las mejores prácticas y tendencias en el mercado de desarrollo de software. Trabajó durante 2 años como editor de contenidos en el blog de Alura y hoy todavía escribe artículos técnicos.

Este artículo fue traducido para Alura Latam por Brenda Souza

Artículos de Tecnología

En Alura encontrarás variados cursos sobre . ¡Comienza ahora!

Precios en:
USD
  • USD
  • BOB
  • CLP
  • COP
  • USD
  • PEN
  • MXN
  • UYU

Semestral

  • 273 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 6 meses
US$ 65.90
un solo pago de US$ 65.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Anual

  • 273 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 12 meses
US$ 99.90
un solo pago de US$ 99.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Acceso a todos
los cursos

Estudia las 24 horas,
dónde y cuándo quieras

Nuevos cursos
cada semana