Trier un tableau d'objets en Java
-
Utilisation de
Comparable
pour trier un tableau d’objets en Java - Utilisation de Lambda pour trier un tableau d’objets en Java
Dans ce tutoriel, nous allons apprendre à trier un tableau d’objets à l’aide de l’interface Comparable
et des fonctions Lambda
en Java.
Utilisation de Comparable
pour trier un tableau d’objets en Java
Une interface Comparable
en Java est utilisée pour ordonner les objets définis par l’utilisateur. Ici, la classe Student
implémente Comparable
afin que nous puissions utiliser Arrays.sort()
pour trier un tableau d’objets de la classe Student
.
La classe Student
a trois variables membres name
, age
et gender
. Nous trions les éléments en fonction de ces membres de données uniquement.
L’interface Comparable a une méthode, compareTo()
. Comme on peut le voir dans l’exemple, la classe Student
a implémenté cette méthode.
La méthode compareTo()
est utilisée pour trier l’objet courant avec l’objet spécifié et renvoie un entier positif dans le cas où l’objet courant est supérieur à l’objet courant. Lorsque l’objet courant est inférieur à l’objet spécifié, il renvoie un entier négatif ; si zéro est renvoyé, l’objet présent est équivalent à l’objet spécifié.
Nous avons créé un tableau des objets de la classe Student
. Nous avons passé name
, age
et gender
comme arguments pour les initialiser en utilisant le constructeur par défaut de la classe.
Le tableau est d’abord trié par age
puis name
, comme on peut le voir dans la méthode compareTo()
de la classe Student
. On passe le tableau students
à Arrays.sort()
.
Pour imprimer le tableau trié dans notre format, nous redéfinissons la méthode toString()
dans la classe 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));
}
}
Production :
[{name='Zoey', gender: female, age=10}, {name='Sandy', gender: female, age=20}, {name='Danny', gender: male, age=22}, {name='Jack', gender: male, age=25}]
Utilisation de Lambda pour trier un tableau d’objets en Java
Trier un tableau d’objets devient facile avec les fonctions Lambda
de Java 8 sans implémenter l’interface Comparable
.
Ici, nous avons une classe utilisateur Books
avec des variables membres, bookName
et author
. Le constructeur par défaut initialise ces membres de données.
Les méthodes getter et setter pour accéder à ces membres sont également définies dans la classe Book
. L’interface List
supporte la méthode sort()
.
Ici, bookList
est l’instance de list contenant les objets de la classe Books
. L’expression lambda pour trier la liste par auteur est (Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor())
.
La méthode sort()
renvoie la liste triée, et nous bouclons sur cette liste et imprimons chaque élément. La liste triée est imprimée dans la sortie.
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));
}
}
Production :
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.
LinkedInArticle connexe - Java Array
- Comment concaténer deux tableaux en Java
- Comment convertir un tableau d'octets en chaîne hexadécimale en Java
- Supprimer les doublons du tableau en Java
- Comparer les tableaux en Java
- Tableau associatif en Java
- Découper un tableau en Java