>  기사  >  Java  >  Java 8 Lambda를 사용하여 효율적으로 여러 필드별로 컬렉션을 정렬하는 방법은 무엇입니까?

Java 8 Lambda를 사용하여 효율적으로 여러 필드별로 컬렉션을 정렬하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 07:25:02136검색

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

Java 8 Lambda를 사용하여 여러 필드가 있는 컬렉션 정렬

제공된 정렬 코드가 불완전한 것으로 나타나 예상한 정렬 순서가 생성되지 않을 수 있습니다. Java 8 람다를 사용하여 보다 효율적이고 포괄적인 접근 방식을 살펴보겠습니다.

Java 8 람다 사용

Java 8은 간결하고 읽기 쉬운 직관적인 람다 표현식을 제공하여 목록 정렬을 단순화합니다. 암호. 다음을 고려하십시오.

<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));</code>

이 람다 기반 접근 방식은 비교 프로세스의 순서를 지정하여 .thenComparing() 메서드에서 정의한 우선 순위에 따라 지정된 필드를 기반으로 목록을 효과적으로 정렬합니다.

원본 코드 분석

귀하가 제공한 원본 코드는 보고서 키, 학생 번호 및 학교에 대한 문자열을 연결합니다.

<code class="java">return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool())
        .compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool());</code>

대신 적절한 정렬을 위해 필드를 비교해야 합니다.

향상된 정렬 기능

다음은 람다 구문을 사용하는 정렬 기능의 향상된 버전입니다.

<code class="java">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());});</code>

이 코드는 개별 필드를 직접 비교하여 더 많은 정보를 제공합니다. 정확한 정렬 순서.

위 내용은 Java 8 Lambda를 사용하여 효율적으로 여러 필드별로 컬렉션을 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.