"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 classificar coleções por vários campos com eficiência usando Java 8 Lambda?

Como classificar coleções por vários campos com eficiência usando Java 8 Lambda?

Publicado em 2024-11-06
Navegar:151

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

Classificando coleções com vários campos usando Java 8 Lambda

O código de classificação fornecido parece incompleto e pode não produzir a ordem de classificação esperada. Vamos mergulhar em uma abordagem mais eficiente e abrangente usando lambda do Java 8. código. Considere o seguinte:

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

Essa abordagem baseada em lambda sequencia o processo de comparação, classificando efetivamente a lista com base nos campos especificados na ordem de precedência definida pelo método .thenComparing().
Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));

O código original que você forneceu concatena as strings para a chave do relatório, número do aluno e escola:

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

Em vez disso, para uma classificação adequada, você deve comparar os campos independentemente.
return (record1.getReportKey()   record1.getStudentNumber()   record1.getSchool())
        .compareTo(record2.getReportKey()   record2.getStudentNumber()   record2.getSchool());

Aqui está uma versão aprimorada da função sort usando o lambda sintaxe:

Collections.sort(reportList, (record1, record2) -> { int reportKeyComparison = record1.getReportKey().compareTo(record2.getReportKey()); if (reportKeyComparison! = 0) { retornar reportKeyComparison; } int studentNumberComparison = record1.getStudentNumber().compareTo(record2.getStudentNumber()); if (studentNumberComparison! = 0) { retornar estudanteNumberComparação; } return record1.getSchool().compareTo(record2.getSchool());});

Este código compara diretamente os campos individuais, fornecendo uma ordem de classificação mais precisa.
            
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