Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Comparable: Ordenación Natural de Datos | Fundamentos y Capacidades Funcionales de Stream API
Stream API

bookComparable: Ordenación Natural de Datos

En Java, es común necesitar ordenar objetos. Por ejemplo, en una lista de libros, se puede requerir ordenarlos por título, autor o año de publicación.

Para gestionar estas tareas, Java proporciona las interfaces Comparable y Comparator. Ambas logran el mismo objetivo (ordenar objetos), pero lo hacen de diferentes maneras. Analicémoslas una por una.

¿Qué es Comparable?

Por ejemplo, las cadenas de Java se ordenan alfabéticamente por defecto porque la clase String implementa Comparable.

El método clave en la interfaz funcional Comparable es:

int compareTo(T o);

Este método devuelve:

  • Un número negativo si el objeto actual es menor que el objeto dado;
  • Cero si los objetos son iguales;
  • Un número positivo si el objeto actual es mayor que el objeto dado.

Ejemplo: Ordenar libros por año

Supongamos que se desea comparar objetos Book según su año de publicación.

Para lograr esto, la clase Book puede implementar Comparable y sobrescribir el método compareTo. Al sobrescribir este método, se define cómo deben compararse los objetos Book, lo que afecta directamente el comportamiento de ordenación en métodos como Collections.sort().

Esto permite controlar el orden en que se ordenan los libros—ya sea ascendente o descendente—según la lógica implementada en compareTo.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Cuando se llama a Collections.sort(books), Java itera a través de la lista, comparando elementos utilizando el método compareTo definido en la clase Book.

Para cada comparación, compareTo devuelve un valor numérico que determina el orden de dos libros. Basándose en estos valores, el algoritmo de ordenación reorganiza los elementos para que estén ordenados por año de publicación ascendente.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 8

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 2.33

bookComparable: Ordenación Natural de Datos

Desliza para mostrar el menú

En Java, es común necesitar ordenar objetos. Por ejemplo, en una lista de libros, se puede requerir ordenarlos por título, autor o año de publicación.

Para gestionar estas tareas, Java proporciona las interfaces Comparable y Comparator. Ambas logran el mismo objetivo (ordenar objetos), pero lo hacen de diferentes maneras. Analicémoslas una por una.

¿Qué es Comparable?

Por ejemplo, las cadenas de Java se ordenan alfabéticamente por defecto porque la clase String implementa Comparable.

El método clave en la interfaz funcional Comparable es:

int compareTo(T o);

Este método devuelve:

  • Un número negativo si el objeto actual es menor que el objeto dado;
  • Cero si los objetos son iguales;
  • Un número positivo si el objeto actual es mayor que el objeto dado.

Ejemplo: Ordenar libros por año

Supongamos que se desea comparar objetos Book según su año de publicación.

Para lograr esto, la clase Book puede implementar Comparable y sobrescribir el método compareTo. Al sobrescribir este método, se define cómo deben compararse los objetos Book, lo que afecta directamente el comportamiento de ordenación en métodos como Collections.sort().

Esto permite controlar el orden en que se ordenan los libros—ya sea ascendente o descendente—según la lógica implementada en compareTo.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Cuando se llama a Collections.sort(books), Java itera a través de la lista, comparando elementos utilizando el método compareTo definido en la clase Book.

Para cada comparación, compareTo devuelve un valor numérico que determina el orden de dos libros. Basándose en estos valores, el algoritmo de ordenación reorganiza los elementos para que estén ordenados por año de publicación ascendente.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 8
some-alt