객체를 여러 필드로 비교
객체 지향 프로그래밍에서는 다양한 필드를 기반으로 객체를 비교하는 것이 바람직한 경우가 많습니다. 그러나 Comparable 인터페이스는 단일 필드에 의한 비교만 허용합니다.
문제
firstName, lastName 및 age 필드가 있는 Person 클래스를 생각해 보세요. 과도한 메소드나 오버헤드를 추가하지 않고 여러 필드별로 이러한 객체를 비교할 수 있는 방법이 필요합니다.
Java 8 솔루션
Java 8에서는 람다 표현식과 메소드 참조를 도입했습니다. 사용자 정의 비교기를 만드는 것은 쉽습니다.
Comparator<Person> comparator = Comparator.comparing((Person p) -> p.firstName) .thenComparing(p -> p.lastName) .thenComparingInt(p -> p.age);
이 비교기는 먼저 firstName을 비교한 다음 lastName을 비교하고 마지막으로 비교합니다. age.
대체 구문
Person 클래스에 해당 필드에 대한 접근자 메서드가 있는 경우 메서드 참조를 사용하여 비교기를 단순화할 수 있습니다.
Comparator<Person> comparator = Comparator.comparing(Person::getFirstName) .thenComparing(Person::getLastName) .thenComparingInt(Person::getAge);
사용하기 비교기
비교기가 생성되면 다음과 같이 사용할 수 있습니다.
Person 객체 컬렉션을 정렬하려면:
List<Person> persons = ...; Collections.sort(persons, comparator);
두 사람을 비교하려면 객체:
Person p1 = ...; Person p2 = ...; int result = comparator.compare(p1, p2);
비교 가능 구현
클래스를 직접 비교할 수 있어야 하는 경우(예: 정렬된 데이터 구조에서 사용), 다음 방법으로 Comparable 인터페이스를 구현할 수 있습니다.
@Override public int compareTo(Person o) { int result = Comparator.comparing(Person::getFirstName) .thenComparing(Person::getLastName) .thenComparingInt(Person::getAge) .compare(this, o); return result; }
이것은 접근 방식은 객체 비교를 단순화하고 여러 전용 비교 방법의 필요성을 줄여줍니다.
위 내용은 여러 필드를 기반으로 Java 개체를 어떻게 비교할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!