>Java >java지도 시간 >비교기를 사용하여 Java에서 사용자 정의 개체 목록을 올바르게 정렬하려면 어떻게 해야 합니까?

비교기를 사용하여 Java에서 사용자 정의 개체 목록을 올바르게 정렬하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-25 06:16:09546검색

How Can I Correctly Sort a List of Custom Objects in Java Using Comparators?

Java에서 비교기를 사용하여 객체 정렬

비교기 이해

Java에서 비교기는 객체가 정렬되는 방식을 정의하는 인터페이스입니다. 정렬 목적으로 비교됩니다. 비교기를 구현하면 Comparable 인터페이스에서 제공하는 자연스러운 순서에서 벗어나는 사용자 정의 정렬 동작을 정의할 수 있습니다.

오류 분석

귀하의 코드에서 예외가 발생하는 이유는 다음과 같습니다. Comparable 또는 Comparator 인터페이스를 구현하지 않고 People 객체가 포함된 ArrayList를 정렬하려고 합니다. People 클래스의 비교 메서드는 Integer 래퍼 개체가 아닌 People 클래스의 인스턴스를 비교해야 하므로 올바르지 않습니다.

해결책

이 문제를 해결하려면 다음과 같이 ID를 기준으로 People 객체를 비교하는 비교기를 구현할 수 있습니다.

import java.util.Comparator;

public class PeopleComparator implements Comparator<People> {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
}

TestPeople 클래스에서, PeopleComparator를 사용하여 peps 목록을 정렬합니다.

import java.util.ArrayList;
import java.util.Collections;

public class TestPeople {

    public static void main(String[] args) {
        ArrayList<People> peps = new ArrayList<>();

        peps.add(new People(123, "M", 14.25));
        // ...

        Collections.sort(peps, new PeopleComparator());

        for (People person : peps) {
            System.out.println(person);
        }
    }
}

대체 접근 방식

Java는 할당할 수 있는 Comparator 클래스를 사용하여 사용자 정의 정렬을 구현하는 대체 방법을 제공합니다. 별도의 클래스가 필요 없이 sort 메서드에 직접 연결됩니다. 예:

Collections.sort(peps, new Comparator<People>() {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
});

또한 새로운 람다 표현식 구문(Java 8)을 사용하여 비교기 구현을 단순화할 수 있습니다.

Collections.sort(peps, (p1, p2) -> p1.getId() - p2.getId());

위 내용은 비교기를 사용하여 Java에서 사용자 정의 개체 목록을 올바르게 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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