"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo escribir una función de comparación personalizada en Java?

¿Cómo escribir una función de comparación personalizada en Java?

Publicado el 2024-11-01
Navegar:903

How to Write a Custom Comparator Function in Java?

1. Comprender los conceptos básicos de Comparator en Java

En Java, la interfaz Comparador proporciona una manera de comparar dos objetos para determinar su orden. Esto es especialmente útil cuando desea ordenar colecciones como listas o matrices en un orden personalizado.

Se necesita un Comparador personalizado cuando el orden natural de los objetos (según lo definido por su implementación Comparable) no satisface sus necesidades. Por ejemplo, ordenar una lista de objetos Empleado por salario, nombre o edad puede requerir comparadores diferentes.

2. Escribir una función de comparación personalizada

Repasemos el proceso de creación de un Comparador personalizado.

2.1 Ejemplo: ordenar una lista de empleados por salario

Considere una clase Empleado con campos nombre, edad y salario. Queremos ordenar una lista de objetos Empleado por salario en orden ascendente.

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());
    }
}

En este ejemplo, la clase SalaryComparator implementa la interfaz Comparator y anula el método de comparación para comparar empleados según su salario.

2.2 Demostración: Ordenar la lista de empleados

Ahora, creemos una lista de empleados y clasifíquela usando nuestro Comparador personalizado.

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 Resultado de la demostración

Al ejecutar el código anterior se producirá el siguiente resultado:

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 lista de empleados ahora está ordenada por su salario en orden ascendente, gracias al Comparador personalizado.

3. Comparadores personalizados avanzados

A veces, es posible que necesites una lógica de comparación más compleja o quieras ordenar por varios campos.

3.1 Ejemplo: clasificación por criterios múltiples

Modifiquemos nuestro Comparador para ordenar primero por salario y luego por nombre en caso de empate.

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 Demostración: clasificación por salario y nombre

Utilizando SalaryThenNameComparator, ahora puedes ordenar los empleados por salario y nombre:

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

4. Conclusión

Escribir una función de Comparador personalizada en Java le permite adaptar el comportamiento de clasificación de las colecciones para satisfacer necesidades específicas. Ya sea que necesite una comparación simple por un solo campo o una clasificación compleja por múltiples criterios, Comparator proporciona una solución flexible y potente.

Si tienes alguna pregunta o necesitas más aclaraciones, ¡no dudes en dejar un comentario a continuación!

Lea más publicaciones en: ¿Cómo escribir una función de comparación personalizada en Java?

Declaración de liberación Este artículo se reproduce en: https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3