从集合中删除重复项

时间:2011-03-22 17:25:08

标签: collections groovy

我想获得具有不同语言的所有语言环境的列表,其中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 个答案:

答案 0 :(得分:5)

您使用的语法错误:您正在使用Collection.unique(Closure closure)

allLocales.unique {new ISO3LangComparator()}

您应该使用Collection.unique(Comparator comparator)

allLocales.unique (new ISO3LangComparator())

只需使用()代替{},您的问题就会解决。

答案 1 :(得分:5)

亚当说的话 或者......

allLocales.unique{it.ISO3Language}

你忘记了比较器