2017-05-11 6 views
1

내 LASTNAME을 나열합니다. 나는이 두 예제 (1, 2) 인 Java 8 comparable을 읽었습니다. 올바르게 구현 했습니까?정렬 내가 저자 클래스는 다음과 같이 작성해야

+2

을 일반적으로, 객체의'compareTo' 방법은 개체에 대한 정식 가장 일반적인 비교해야한다. 좀 더 구체적인 옵션은'Comparator.comparing (Author :: getLastname)'을 사용하는 것입니다. – 4castle

+0

자바 8 비교기에 대해이 [post] (https://www.mkyong.com/java8/java-8-lambda-comparator-example/)를 참조한다고 가정 해보십시오. –

+0

@ 4castle의 요점에 덧붙이면, 비교 가능한 클래스는 equals *와 일치하는 것이 좋습니다. 즉, a.compareTo (b) == 0은 항상 a.equals (b)와 같아야합니다. 나는 그것이 여기의 경우가 아니라고 생각한다. – shmosel

답변

0

나는 그것이 좋은 구현이라고 생각한다. 두 번째 방법은 다음과 같습니다

List<Author> list = new ArrayList<>(); 
Collections.sort(list, new Comparator<Author>() { 
    @Override 
    public int compare(Author a1, Author a2) { 
     return a1.getLastName().compareTo(a2.getLastName()); 
    } 
}); 

그리고 당신은이 목록을 정렬 할 경우 장소에 사용합니다.

@Update, 세 번째 옵션 :

public static class AuthorComparator implements Comparator<Author> { 
    @Override 
    public int compare(Author a1, Author a2) { 
     return a1.getLastName().compareTo(a2.getLastName()); 
    } 
} 

당신은 당신의 저자 클래스에 넣고해야합니다. 그리고 정렬 할 곳 :

List<Author> list = new ArrayList<>(); 
Collections.sort(list, new Author.AuthorComparator()); 
+0

여기에 익명 클래스를 사용해야합니까, 아니면 대안이 있습니까? –

+0

정적 내부 클래스를 사용할 수 있습니다. – Kutti

+0

답변이 업데이트되었습니다. – Kutti