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

Как эффективно сортировать коллекции по нескольким полям, используя лямбду Java 8?

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

How to Sort Collections by Multiple Fields Efficiently Using Java 8 Lambda\'s?

Сортировка коллекций с несколькими полями с использованием Java 8 Lambda

Предоставленный код сортировки выглядит неполным и может не обеспечить ожидаемый порядок сортировки. Давайте углубимся в более эффективный и комплексный подход с использованием лямбда-выражений Java 8.

использование лямбда-выражений Java 8

Java 8 упрощает сортировку списков, предоставляя интуитивно понятные лямбда-выражения, которые позволяют кратко и легко читать код. Рассмотрим следующее:

Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));

Этот подход на основе лямбда-выражений упорядочивает процесс сравнения, эффективно сортируя список на основе указанных полей в порядке приоритета, определенном методом .thenComparing().

Анализ исходного кода

Предоставленный вами исходный код объединяет строки для ключа отчета, номера учащегося и школы:

return (record1.getReportKey()   record1.getStudentNumber()   record1.getSchool())
        .compareTo(record2.getReportKey()   record2.getStudentNumber()   record2.getSchool());

Вместо этого для правильной сортировки следует сравнивать поля независимо.

Расширенная функция сортировки

Вот расширенная версия функции сортировки с использованием лямбда-синтаксиса:

Collections.sort(reportList, (record1, record2) -> {
        int reportKeyComparison = record1.getReportKey().compareTo(record2.getReportKey());
        if (reportKeyComparison != 0) {
            return reportKeyComparison;
        }

        int studentNumberComparison = record1.getStudentNumber().compareTo(record2.getStudentNumber());
        if (studentNumberComparison != 0) {
            return studentNumberComparison;
        }

        return record1.getSchool().compareTo(record2.getSchool());});

Этот код напрямую сравнивает отдельные поля, обеспечивая более точный порядок сортировки.

Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3