このバージョンのコードは、Java 8 ラムダを利用して、目的の並べ替え結果を実現します:
<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey) .thenComparing(Report::getStudentNumber) .thenComparing(Report::getSchool));</code>
ここで重要なのは、thenComparing メソッドを使用してコンパレータのチェーンを作成することです。チェーン内の各コンパレーターは、Report オブジェクト内のフィールドの 1 つを比較します。結果のコンパレータはリストの並べ替えに使用されます。
このアプローチは簡潔で読みやすく、タイプセーフです。また、ゲッターを遅延評価するという利点もあります。つまり、ゲッターは比較に必要な場合にのみ呼び出されます。
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report record1, Report record2) { return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool()) .compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool()); } });</code>
このアプローチは、複数のフィールドを持つオブジェクトを並べ替える場合には推奨されません。
<code class="java">ComparatorChain chain = new ComparatorChain(Arrays.asList( new BeanComparator("reportKey"), new BeanComparator("studentNumber"), new BeanComparator("school"))); Collections.sort(reportList, chain); </code>
このアプローチは、複数のフィールドを持つオブジェクトを並べ替える場合には推奨されません。
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report p1, Report p2) { return ComparisonChain.start().compare(p1.getReportKey(), p2.getReportKey()).compare(p1.getStudentNumber(), p2.getStudentNumber()).compare(p1.getSchool(), p2.getSchool()).result(); } }); </code>
このアプローチは、複数のフィールドを持つオブジェクトを並べ替えるには良い選択ですが、Java 8 ラムダ アプローチほど簡潔ではありません。
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report p1, Report p2) { return new CompareToBuilder().append(p1.getReportKey(), p2.getReportKey()).append(p1.getStudentNumber(), p2.getStudentNumber()).append(p1.getSchool(), p2.getSchool()).toComparison(); } }); </code>
このアプローチは、複数のフィールドを持つオブジェクトを並べ替えるには良い選択ですが、Java 8 ラムダ アプローチほど簡潔ではありません。
最終的に、複数のフィールドを持つオブジェクトを並べ替える最適な方法は、アプリケーションの特定の要件によって異なります。 Java 8 ラムダ アプローチは最も簡潔でタイプセーフですが、Java 8 以降が必要です。 Google Guava ComparisonChain アプローチは、Java 8 ラムダ アプローチよりも柔軟性が必要なアプリケーションに適していますが、それほど簡潔ではありません。 Apache Commons CompareToBuilder アプローチは、Google Guava ComparisonChain アプローチほど柔軟性を必要としないアプリケーションに適していますが、それほど簡潔ではありません。
以上がJava 8 の Lambda アプローチが、複数のフィールドを持つオブジェクトを並べ替える最適な方法であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。