비교기 이해
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!