「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java 8 Lambda を使用して複数のフィールドでコレクションを効率的に並べ替える方法

Java 8 Lambda を使用して複数のフィールドでコレクションを効率的に並べ替える方法

2024 年 11 月 6 日に公開
ブラウズ:706

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