Correction 2 avec Collection
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 :
-
Collections.sort: C'est la méthode que nous utilisons pour trier notre listebaleines. -
Comparator.comparingDouble:Comparatorest une interface fonctionnelle utilisée pour définir la logique de tri. Ici, nous utilisons la méthodecomparingDoublede cette interface pour spécifier que nous voulons trier les objetsBaleineen fonction d'une valeurdouble(le poids total estimé). -
Baleine::poidsTotalEstime: C'est une référence de méthode. Elle fait référence à la méthodepoidsTotalEstimede la classeBaleine. Cette méthode est utilisée pour récupérer le critère de tri (le poids total estimé) pour chaque objetBaleine. -
.reversed(): Après avoir défini le critère de tri, nous utilisons la méthodereversedpour 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-eachparcourt chaque objetBaleinedans la liste triéebaleines. - 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.