"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como escrever uma função de comparação personalizada em Java?

Como escrever uma função de comparação personalizada em Java?

Publicado em 01/11/2024
Navegar:324

How to Write a Custom Comparator Function in Java?

1. Compreendendo os fundamentos do comparador em Java

Em Java, a interface Comparator fornece uma maneira de comparar dois objetos para determinar sua ordem. Isto é especialmente útil quando você deseja classificar coleções como listas ou matrizes em uma ordem personalizada.

Um Comparator personalizado é necessário quando a ordem natural dos objetos (conforme definido por sua implementação Comparable) não atende às suas necessidades. Por exemplo, classificar uma lista de objetos Employee por salário, nome ou idade pode exigir comparadores diferentes.

2. Escrevendo uma função de comparação personalizada

Vamos percorrer o processo de criação de um Comparador personalizado.

2.1 Exemplo: Classificando uma lista de funcionários por salário

Considere uma classe Funcionário com os campos nome , idade e salário. Queremos classificar uma lista de objetos Funcionário por salário em ordem crescente.

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

Neste exemplo, a classe SalaryComparator implementa a interface Comparator e substitui o método compare para comparar funcionários por salário.

2.2 Demonstração: Classificando a Lista de Funcionários

Agora, vamos criar uma lista de funcionários e classificá-la usando nosso 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 da Demonstração

A execução do código acima produzirá a seguinte saída:

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}

A lista de funcionários agora está ordenada por salário em ordem crescente, graças ao Comparador personalizado.

3. Comparadores personalizados avançados

Às vezes, você pode precisar de uma lógica de comparação mais complexa ou querer classificar por vários campos.

3.1 Exemplo: Classificação por múltiplos critérios

Vamos modificar nosso Comparador para classificar primeiro por salário e depois por nome em 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 Demonstração: Classificação por Salário e Nome

Usando o SalaryThenNameComparator , agora você pode classificar os funcionários por salário e nome:

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

4. Conclusão

Escrever uma função Comparadora personalizada em Java permite adaptar o comportamento de classificação de coleções para atender a necessidades específicas. Se você precisa de uma comparação simples por um único campo ou de uma classificação complexa por vários critérios, o Comparator oferece uma solução flexível e poderosa.

Se você tiver alguma dúvida ou precisar de mais esclarecimentos, fique à vontade para deixar um comentário abaixo!

Leia mais postagens em: Como escrever uma função de comparação personalizada em Java?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3