Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

Ordenar una lista de objetos en Java

Alex Felipe
Alex Felipe
03/10/2023

Compartir

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:

  • Para colocar al alumno más a la izquierda de la lista, retornamos -1.
  • Para colocar al alumno más a la derecha de la lista, retornamos 1.
  • Cuando retornamos 0, significa que los alumnos comparados son iguales y no alteran sus posiciones.

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ículo Anterior
Métodos de petición HTTP
Siguiente Artículo
Regex en C#: cómo utilizar expresiones regulares

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast