удалить дубликаты из коллекции - PullRequest
3 голосов
/ 22 марта 2011

Я хочу получить список всех локалей, которые имеют другой язык, где код ISO3 используется для определения языка локали.Я думал, что следующее должно работать

class ISO3LangComparator implements Comparator<Locale> {

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

def allLocales = Locale.getAvailableLocales().toList()
def uniqueLocales = allLocales.unique {new ISO3LangComparator()}

// Test how many locales there are with iso3 code 'ara'
def arabicLocaleCount = uniqueLocales.findAll {it.ISO3Language == 'ara'}.size()

// This assertion fails
assert arabicLocaleCount <= 1

Ответы [ 2 ]

5 голосов
/ 23 марта 2011

что сказал Адам.
или ...

allLocales.unique{it.ISO3Language}

и вы забудете о компараторе

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

Вы используете неправильный синтаксис: вы используете Collection.unique (замыкание закрытия) :

allLocales.unique {new ISO3LangComparator()}

Вы должны использовать Collection.unique (компаратор-компаратор)

allLocales.unique (new ISO3LangComparator())

Так что просто используйте () вместо {}, и ваша проблема решена.

...