2011-03-22 7 views
3

GDK 문서에 따르면 Collection.sort(Comparator comparator)은 콜렉션이 변경되지 않았 음을 나타내지 만 아래 코드는 그렇지 않다는 것을 나타냅니다. 이것은 구현의 버그, 문서의 오류 또는 내 부분에 대한 오해입니까?콜렉션 정렬

class ISO3LangComparator implements Comparator<Locale> { 

    int compare(Locale locale1, Locale locale2) { 
     locale1.ISO3Language <=> locale2.ISO3Language 
    } 
} 

List<Locale> locales = [Locale.FRENCH, Locale.ENGLISH] 
def sortedLocales = locales.sort(new ISO3LangComparator()) 

// This assertion fails 
assert locales[0] == frenchLocale 
+0

나는 설명서가 잘못되었다고 생각한다. :-('sort'는 아마도 그루비에서 내가 가장 좋아하는 것이 아닐 것이다 ... –

+2

http://jira.codehaus.org/browse/GROOVY-4742에 추가했다. –

+0

감사합니다. Tim, 위의 코드를 문제에 추가했습니다. –

답변

2

문서 상태 : 컬렉션이 목록은

경우가 자리에 정렬 반환됩니다. 그렇지 않으면 요소는 먼저 이 새 목록에 배치되고 이 정렬되어 반환됩니다. 원래 Collection은 변경되지 않은 상태로 둡니다. 정렬() 메소드

public static <T> List<T> sort(Collection<T> self, Comparator<T> comparator) { 
    List<T> list = asList(self); 
    Collections.sort(list, comparator); 
    return list; 
} 

asList 방법은 소정의 컬렉션의 인스턴스인지의 java.util.List에 보이는 구현에 반영

. 예이면 참조를 반환하고, 그렇지 않으면 새로운 java.util.ArrayList 인스턴스를 반환합니다.

[] 구문을 사용하고 있으므로 사용자는 암시 적으로 java.util.List 인스턴스로 작업합니다.