сортировка коллекций - PullRequest
       15

сортировка коллекций

3 голосов
/ 22 марта 2011

Документы GDK указывают, что Collection.sort (компараторный компаратор) не меняет вызываемую коллекцию, но приведенный ниже код указывает на иное.Это ошибка в реализации, ошибка в документации или недоразумение с моей стороны?

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

1 Ответ

2 голосов
/ 14 апреля 2011

документация гласит:

Если коллекция представляет собой список, она сортируется на месте и возвращается.В противном случае элементы сначала помещаются в новый список, который затем сортируется и возвращается, оставляя исходную коллекцию без изменений.

, что отражено в реализации метода sort ()

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...