Ordenar un array de objetos en Java

Rupam Yadav 12 octubre 2023
  1. Uso de Comparable para ordenar un array de objetos en Java
  2. Uso de Lambda para ordenar un array de objetos en Java
Ordenar un array de objetos en Java

En este tutorial, aprenderemos cómo ordenar un array de objetos utilizando la interfaz Comparable y las funciones Lambda en Java.

Uso de Comparable para ordenar un array de objetos en Java

Se utiliza una interfaz Comparable en Java para ordenar objetos definidos por el usuario. Aquí, la clase Student implementa Comparable para que podamos usar Arrays.sort() para ordenar un array de objetos de la clase Student.

La clase Student tiene tres variables miembro name, age y gender. Clasificamos los elementos según estos miembros de datos únicamente.

La interfaz Comparable tiene un método, compareTo(). Como podemos ver en el ejemplo, la clase Student ha implementado este método.

El método compareTo() se utiliza para ordenar el objeto actual con el objeto especificado y devuelve un número entero positivo en caso de que el objeto actual sea mayor que el objeto actual. Cuando el objeto actual es menor que el objeto especificado, devuelve un entero negativo; si se devuelve cero, el objeto presente es equivalente al objeto especificado.

Creamos un array de objetos de la clase Student. Pasamos name, age y gender como argumentos para inicializarlos usando el constructor predeterminado de la clase.

el array se ordena primero por age y luego por name, como podemos ver en el método compareTo() de la clase Student. Pasamos el array students a Arrays.sort().

Para imprimir el array ordenada en nuestro formato, anulamos el método toString() en la clase Student.

import java.util.Arrays;

class Student implements Comparable<Student> {
  private String name;
  private int age;
  private String gender;

  public Student(String name, int age, String gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
  }
  @Override
  public String toString() {
    return "{"
        + "name='" + name + '\'' + ", gender: " + gender + ", "
        + "age=" + age + '}';
  }
  public int getAge() {
    return age;
  }

  public String getGender() {
    return gender;
  }

  public String getName() {
    return name;
  }

  @Override
  public int compareTo(Student o) {
    if (this.age != o.getAge()) {
      return this.age - o.getAge();
    }
    return this.name.compareTo(o.getName());
  }
}

public class TestExample {
  public static void main(String[] args) {
    Student[] students = {new Student("Jack", 25, "male"), new Student("Sandy", 20, "female"),
        new Student("Danny", 22, "male"), new Student("Zoey", 10, "female")};

    Arrays.sort(students);
    System.out.println(Arrays.toString(students));
  }
}

Producción :

[{name='Zoey', gender: female, age=10}, {name='Sandy', gender: female, age=20}, {name='Danny', gender: male, age=22}, {name='Jack', gender: male, age=25}]

Uso de Lambda para ordenar un array de objetos en Java

Ordenar un array de objetos se vuelve fácil con las funciones Lambda en Java 8 sin implementar la interfaz Comparable.

Aquí, tenemos una clase de usuario Books con variables miembro, bookName y autor. El constructor predeterminado inicializa estos miembros de datos.

Los métodos getter y setter para acceder a estos miembros también se definen en la clase Book. La interfaz List admite el método sort().

Aquí, bookList es la instancia de la lista que contiene los objetos de la clase Books. La expresión lambda para ordenar la lista por autor es (Libros a, Libros b) -> a.getAuthor().compareTo(b.getAuthor()).

El método sort() devuelve la lista ordenada, recorremos esa lista e imprimimos cada elemento. La lista ordenada se imprime en la salida.

import java.util.ArrayList;
import java.util.List;

class Books {
  String bookName;
  String author;
  public Books(String bookName, String author) {
    this.bookName = bookName;
    this.author = author;
  }

  @Override
  public String toString() {
    return "{"
        + "Book ='" + bookName + '\'' + ", author = '" + author + '\'' + "}";
  }

  public String getAuthor() {
    return author;
  }

  public String getBookName() {
    return bookName;
  }
}
public class ExampleObjectSort {
  public static void main(String[] args) {
    List<Books> bookList = new ArrayList<>();
    bookList.add(new Books("Barney's Version", "Mordecai Richler"));
    bookList.add(new Books("The Unsettlers", "Mark Sundeen"));
    bookList.add(new Books("The Debt to Pleasure", "John Lanchester"));
    bookList.add(new Books("How to Do Nothing", "Jenny Odell"));

    System.out.println("Before Sorting");
    bookList.forEach((s) -> System.out.println(s));
    System.out.println("");
    System.out.println("Sorted Books by author Using Lambda.");
    bookList.sort((Books a, Books b) -> a.getAuthor().compareTo(b.getAuthor()));
    bookList.forEach((s) -> System.out.println(s));
  }
}

Producción :

Before Sorting
{Book ='Barney's Version', author = 'Mordecai Richler'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='How to Do Nothing', author = 'Jenny Odell'}

Sorted Books by author Using Lambda.
{Book ='How to Do Nothing', author = 'Jenny Odell'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='Barney's Version', author = 'Mordecai Richler'}
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artículo relacionado - Java Array

Artículo relacionado - Java Object