Ordenar un array de objetos en Java
-
Uso de
Comparable
para ordenar un array de objetos en Java - Uso de Lambda para 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedInArtículo relacionado - Java Array
- Cómo concatenar dos arrays en Java
- Cómo convertir un array de bytes en una cadena hexadecimal en Java
- Eliminar duplicados del array en Java
- Contar elementos repetidos en una matriz en Java
- Llenar una matriz 2D en Java
- Obtenga el subconjunto de una matriz en Java