«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как написать собственную функцию компаратора на Java?

Как написать собственную функцию компаратора на Java?

Опубликовано 1 ноября 2024 г.
Просматривать:728

How to Write a Custom Comparator Function in Java?

1. Понимание основ компаратора в Java

В Java интерфейс Comparator позволяет сравнивать два объекта для определения их порядка. Это особенно полезно, когда вы хотите отсортировать коллекции, такие как списки или массивы, в произвольном порядке.

Пользовательский Компаратор необходим, когда естественный порядок объектов (как определено их реализацией Comparable) не соответствует вашим потребностям. Например, для сортировки списка объектов «Сотрудник» по зарплате, имени или возрасту могут потребоваться разные компараторы.

2. Написание пользовательской функции сравнения

Давайте рассмотрим процесс создания собственного Компаратора.

2.1 Пример: сортировка списка сотрудников по зарплате

Рассмотрим класс Сотрудник с полями имя , возраст и зарплата. Мы хотим отсортировать список объектов Сотрудник по зарплате в порядке возрастания.

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

В этом примере класс SalaryComparator реализует интерфейс Comparator и переопределяет метод сравнения для сравнения сотрудников по их зарплате.

2.2 Демонстрация: сортировка списка сотрудников

Теперь давайте создадим список сотрудников и отсортируем его с помощью нашего специального Компаратора.

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 Результат демо-версии

Выполнение приведенного выше кода приведет к следующему выводу:

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}

Список сотрудников теперь отсортирован по их зарплате в порядке возрастания благодаря специальному Компаратору.

3. Расширенные пользовательские компараторы

Иногда вам может потребоваться более сложная логика сравнения или сортировка по нескольким полям.

3.1 Пример: сортировка по нескольким критериям

Давайте изменим наш Компаратор так, чтобы он сначала сортировал данные по зарплате, а затем по имени в случае ничьей.

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 Демо: сортировка по зарплате и имени

Используя SalaryThenNameComparator , вы теперь можете сортировать сотрудников по зарплате и имени:

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

4. Заключение

Написание собственной функции Comparator на Java позволяет адаптировать поведение сортировки коллекций к конкретным потребностям. Если вам нужно простое сравнение по одному полю или сложная сортировка по нескольким критериям, Comparator предоставит гибкое и мощное решение.

Если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения, оставьте комментарий ниже!

Подробнее читайте на странице : Как написать собственную функцию сравнения на Java?

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3