이 버전의 코드는 Java 8 람다를 활용하여 다음을 수행합니다. 원하는 정렬 결과를 얻으세요:
<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey) .thenComparing(Report::getStudentNumber) .thenComparing(Report::getSchool));</code>
여기서 핵심은 thenComparing 메소드를 사용하여 비교기 체인을 생성하는 것입니다. 체인의 각 비교기는 보고서 개체의 필드 중 하나를 비교합니다. 그런 다음 결과 비교기는 목록을 정렬하는 데 사용됩니다.
이 접근 방식은 간결하고 읽기 쉬우며 유형이 안전합니다. 또한 게터를 느리게 평가하는 장점도 있습니다. 즉, 비교에 필요할 때만 게터가 호출된다는 의미입니다.
손으로 정렬하는 원본 코드는 장황하고 오류가 발생하기 쉽습니다. 많은 입력과 유지 관리가 필요하며 비교 논리를 작성할 때 실수하기 쉽습니다. 그 모습은 다음과 같습니다.
<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>
이 접근 방식은 여러 필드가 있는 개체를 정렬하는 데 권장되지 않습니다.
BeanComparator 접근 방식은 리플렉션을 사용하여 Report 개체의 필드를 비교합니다. 이 접근 방식은 수동으로 정렬하는 것보다 더 간결하지만 오류가 발생하기 쉽고 속도도 느립니다. 그 모습은 다음과 같습니다.
<code class="java">ComparatorChain chain = new ComparatorChain(Arrays.asList( new BeanComparator("reportKey"), new BeanComparator("studentNumber"), new BeanComparator("school"))); Collections.sort(reportList, chain); </code>
이 접근 방식은 여러 필드가 있는 개체를 정렬하는 데 권장되지 않습니다.
Google Guava ComparisonChain 접근 방식은 BeanComparator 접근 방식과 유사하지만 더 유연하고 빠릅니다. 그 모습은 다음과 같습니다.
<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 람다 접근 방식만큼 간결하지는 않습니다.
Apache Commons CompareToBuilder 접근 방식은 Google Guava ComparisonChain 접근 방식과 유사하지만 유연성이 떨어집니다. 그 모습은 다음과 같습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!