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

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

DDD
Libérer: 2024-09-26 10:51:42
original
1100 Les gens l'ont consulté

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());
    }
}
Copier après la connexion

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);
    }
}
Copier après la connexion

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}
Copier après la connexion

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;
    }
}
Copier après la connexion

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());
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal