"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment écrire une fonction de comparaison personnalisée en Java ?

Comment écrire une fonction de comparaison personnalisée en Java ?

Publié le 2024-11-01
Parcourir:224

How to Write a Custom Comparator Function in Java?

1. Comprendre les bases du comparateur en Java

En Java, l'interface Comparator permet de comparer deux objets pour déterminer leur ordre. Ceci est particulièrement utile lorsque vous souhaitez trier des collections telles que des listes ou des tableaux dans un ordre personnalisé.

Un Comparator personnalisé est nécessaire lorsque l'ordre naturel des objets (tel que défini par leur implémentation Comparable) ne répond pas à vos besoins. Par exemple, le tri d'une liste d'objets Employé par salaire, nom ou âge peut nécessiter différents comparateurs.

2. Écriture d'une fonction de comparaison personnalisée

Parcourons le processus de création d'un Comparateur.

2.1 Exemple : Trier une liste d'employés par salaire

Considérons une classe Employé avec les champs nom , âge et salary. Nous souhaitons trier une liste d’objets Employé par salaire par ordre croissant.

import java.util.Comparator;

class Employee {
    private String name;
    private int age;
    private double salary;

    // Constructor, getters, and setters
    public Employee(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public String toString() {
        return "Employee{"   "name='"   name   '''   ", age="   age   ", salary="   salary   '}';
    }
}

class SalaryComparator implements Comparator {
    @Override
    public int compare(Employee e1, Employee e2) {
        return Double.compare(e1.getSalary(), e2.getSalary());
    }
}

Dans cet exemple, la classe SalaryComparator implémente l'interface Comparator et remplace la méthode de comparaison pour comparer les employés en fonction de leur salaire.

2.2 Démo : Trier la liste des employés

Maintenant, créons une liste d'employés et trions-la à l'aide de notre Comparateur.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List employees = new ArrayList();
        employees.add(new Employee("John", 28, 50000));
        employees.add(new Employee("Anna", 32, 75000));
        employees.add(new Employee("Mike", 25, 45000));

        System.out.println("Before Sorting:");
        employees.forEach(System.out::println);

        // Sort employees by salary
        Collections.sort(employees, new SalaryComparator());

        System.out.println("
After Sorting by Salary:");
        employees.forEach(System.out::println);
    }
}

2.3 Résultat de la démo

L'exécution du code ci-dessus produira le résultat suivant :

Before Sorting:
Employee{name='John', age=28, salary=50000.0}
Employee{name='Anna', age=32, salary=75000.0}
Employee{name='Mike', age=25, salary=45000.0}

After Sorting by Salary:
Employee{name='Mike', age=25, salary=45000.0}
Employee{name='John', age=28, salary=50000.0}
Employee{name='Anna', age=32, salary=75000.0}

La liste des salariés est désormais triée par leur salaire par ordre croissant, grâce au Comparateur personnalisé.

3. Comparateurs personnalisés avancés

Parfois, vous aurez peut-être besoin d'une logique de comparaison plus complexe ou souhaiterez trier selon plusieurs champs.

3.1 Exemple : Tri selon plusieurs critères

Modifions notre Comparateur pour trier d'abord par salaire, puis par nom en cas d'égalité.

class SalaryThenNameComparator implements Comparator {
    @Override
    public int compare(Employee e1, Employee e2) {
        int salaryCompare = Double.compare(e1.getSalary(), e2.getSalary());
        if (salaryCompare == 0) {
            return e1.getName().compareTo(e2.getName());
        }
        return salaryCompare;
    }
}

3.2 Démo : Tri par salaire et nom

À l'aide de SalaryThenNameComparator , vous pouvez désormais trier les employés par salaire et par nom :

Collections.sort(employees, new SalaryThenNameComparator());

4. Conclusion

L'écriture d'une fonction Comparator personnalisée en Java vous permet d'adapter le comportement de tri des collections pour répondre à des besoins spécifiques. Que vous ayez besoin d'une simple comparaison par un seul champ ou d'un tri complexe par plusieurs critères, Comparator offre une solution flexible et puissante.

Si vous avez des questions ou avez besoin de précisions supplémentaires, n'hésitez pas à laisser un commentaire ci-dessous !

Lisez les articles plus sur : Comment écrire une fonction de comparaison personnalisée en Java ?

Déclaration de sortie Cet article est reproduit sur : https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3