2013-07-04 27 views

回答

47

我不是一個Groovy的人,但我相信你可以做這樣的事情:

[1, 2, 4, 9, 7, 10, 8, 6, 6, 5].unique { a, b -> a <=> b } 

你試過session.ids.unique()

+0

它說空session.ids是空的,當我使用它像session.ids = session.ids.unique(),然後我把它作爲session.ids?.unique()和在一天會議結束。 ids是null.first case。 – danielad

+0

,clouser的工作人員可以增加更多的意義,我的進一步名單業務謝謝。 – danielad

+0

也許只是使用Set而不是List – Daniele

26

如何:

session.ids = session.ids.unique(false) 

更新
unique()unique(false)之間的差異:第二個不修改原始列表。希望有所幫助。

def originalList = [1, 2, 4, 9, 7, 10, 8, 6, 6, 5] 

//Mutate the original list 
def newUniqueList = originalList.unique() 
assert newUniqueList == [1, 2, 4, 9, 7, 10, 8, 6, 5] 
assert originalList == [1, 2, 4, 9, 7, 10, 8, 6, 5] 

//Add duplicate items to the original list again 
originalList << 2 << 4 << 10 

// We added 2 to originalList, and they are in newUniqueList too! This is because 
// they are the SAME list (we mutated the originalList, and set newUniqueList to 
// represent the same object. 
assert originalList == newUniqueList 

//Do not mutate the original list 
def secondUniqueList = originalList.unique(false) 
assert secondUniqueList == [1, 2, 4, 9, 7, 10, 8, 6, 5] 
assert originalList  == [1, 2, 4, 9, 7, 10, 8, 6, 5, 2, 4, 10] 
+0

工作很好,謝謝 – danielad

+2

FYI @danielad,如果你不想變異原始列表,並創建一個新的列表,每次使用'唯一的(假)'。包含重複項目的原始列表將被保留。 :) – dmahapatro

+0

@dmahapatro不能相信我忘了....我甚至認爲這是我的語言增補之一;-) lol –

7
def unique = myList as Set 

將'myList'轉換爲Set。當你使用複雜的(自定義類)時,確保你已經考慮過正確地實現hashCode()和equals()。

10

使用獨特

def list = ["a", "b", "c", "a", "b", "c"] 
println list.unique() 

這將打印

[a, b, c] 
0

如果意圖是session.ids包含唯一的ID,那麼你可以做:

if(!session.ids) 
    session.ids = [] as Set 

那麼您什麼時候做:

session.ids.add(params.id) 

將不會添加重複項。

您也可以使用這個語法:

session.ids << params.id