Correction 2 avec les collections (cours suivant)

// Définition de la classe Baleine
public class Baleine {
    
    // Attributs privés de la classe Baleine
    private String nom;       // Nom de la baleine
    private double taille;    // Taille de la baleine en mètres
    private double poids;     // Poids de la baleine en tonnes
    private int nombre;       // Nombre estimé de baleines de ce type

    // Constructeur de la classe Baleine
    public Baleine(String nom, double taille, double poids, int nombre) {
        this.nom = nom;               // Initialisation du nom
        this.taille = taille;         // Initialisation de la taille
        this.poids = poids;           // Initialisation du poids
        this.nombre = nombre;         // Initialisation du nombre
    }

    // Méthode pour calculer le poids de la baleine par mètre
    public double poidsAuMetre() {
        return poids / taille;        // Retourne le poids divisé par la taille
    }

    // Méthode pour estimer le poids total de toutes les baleines de ce type
    public double poidsTotalEstime() {
        return poids * nombre;        // Retourne le poids multiplié par le nombre
    }

    // Méthode getter pour obtenir le nom de la baleine
    public String getNom(){
        return this.nom;              // Retourne le nom de la baleine
    }

    // Méthode pour convertir les attributs de la baleine en une chaîne de caractères
    @Override
    public String toString() {
        return "Nom: " + nom + ", Taille: " + taille + " mètres, Poids: " + poids + " tonnes, Nombre: " + nombre;
    }
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        ArrayList<Baleine> baleines = new ArrayList<>();

  // Ajout de trois baleines à l'ArrayList avec leurs caractéristiques respectives
        baleines.add(new Baleine("Baleine bleue", 10, 30,15000 )); // Baleine bleue de 30 mètres pesant 10 tonnes/mètre et avec une estimation de 15000 individus
        baleines.add(new Baleine("Baleine à bosse", 5, 15, 80000)); // Baleine à bosse de 15 mètres pesant 5 tonnes/mètre et avec une estimation de 80000 individus
        baleines.add(new Baleine("Baleine grise", 3, 14, 26000)); // Baleine grise de 14 mètres pesant 3 tonnes/mètre et avec une estimation de 26000 individus

        // Affichage du poids au mètre de toutes les baleines
        for (Baleine baleine : baleines) {
            System.out.println(baleine.nom + " - Poids au mètre: " + baleine.poidsAuMetre() + " tonnes/mètre");
        }
        System.out.println();

        afficherCetacesParPoidsTotal(baleines);
    }

    public static void afficherCetacesParPoidsTotal(ArrayList<Baleine> baleines) {
        Collections.sort(baleines, Comparator.comparingDouble(Baleine::poidsTotalEstime).reversed());

        System.out.println("Cétacés par ordre du poids total estimé:");
        for (Baleine baleine : baleines) {
            System.out.println(baleine.nom + " - Poids total estimé: " + baleine.poidsTotalEstime() + " tonnes");
        }
    }
}

Voici une explication détaillée du code qui utilise la classe Collections pour trier et afficher les baleines par ordre de poids total estimé : 

Utilisation de la classe Collections :

La classe Collections est une classe utilitaire dans le package java.util. Elle fournit de nombreuses méthodes statiques utiles pour manipuler ou opérer sur des collections, notamment pour le tri, la recherche, la copie, le remplissage, etc.

Dans notre cas, nous utilisons la méthode sort de cette classe pour trier une ArrayList d'objets Baleine selon un critère spécifique.

Code :

Collections.sort(baleines, Comparator.comparingDouble(Baleine::poidsTotalEstime).reversed());

Explication :

  1. Collections.sort: C'est la méthode que nous utilisons pour trier notre liste baleines.

  2. Comparator.comparingDouble: Comparator est une interface fonctionnelle utilisée pour définir la logique de tri. Ici, nous utilisons la méthode comparingDouble de cette interface pour spécifier que nous voulons trier les objets Baleine en fonction d'une valeur double (le poids total estimé).

  3. Baleine::poidsTotalEstime: C'est une référence de méthode. Elle fait référence à la méthode poidsTotalEstime de la classe Baleine. Cette méthode est utilisée pour récupérer le critère de tri (le poids total estimé) pour chaque objet Baleine.

  4. .reversed(): Après avoir défini le critère de tri, nous utilisons la méthode reversed pour inverser l'ordre de tri, de sorte que les baleines ayant le plus grand poids total estimé apparaissent en premier.

Suite du code :

Après avoir trié la liste, nous utilisons une boucle for-each pour afficher les baleines dans l'ordre trié :

System.out.println("Cétacés par ordre du poids total estimé:");
for (Baleine baleine : baleines) {
    System.out.println(baleine.nom + " - Poids total estimé: " + baleine.poidsTotalEstime() + " tonnes");
}

Explication :

  • La boucle for-each parcourt chaque objet Baleine dans la liste triée baleines.
  • Pour chaque baleine, nous affichons son nom et son poids total estimé.

Conclusion :

En utilisant la classe Collections et l'interface Comparator, nous pouvons facilement trier une collection d'objets selon un critère spécifique. Dans cet exemple, nous avons trié une liste de baleines selon leur poids total estimé en descendant.

Modifié le: mercredi 18 octobre 2023, 07:43