Trier un tableau d'objets en Java

Rupam Yadav 12 octobre 2023
  1. Utilisation de Comparable pour trier un tableau d’objets en Java
  2. Utilisation de Lambda pour trier un tableau d’objets en Java
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'}
Auteur: Rupam Yadav
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

Article connexe - Java Array

Article connexe - Java Object