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

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

DDD
DDDoriginal
2024-09-26 10:51:421096parcourir

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 Employee 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 personnalisé.

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

Considérons une classe Employé avec les champs nom , âge et salaire. 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<Employee> {
    @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 personnalisé.

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

public class Main {
    public static void main(String[] args) {
        List<Employee> 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<Employee> {
    @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

Grâce au 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 ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn