我有一个要保存到数据库中的ID列表集合
if(!session.ids)
session.ids = []
session.ids.add(params.id)
我发现该列表有重复项,例如
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5]
然后我想通过应用类似的东西删除所有重复项:
session.ids.removeAll{ //some clousure case }
我发现只有这个:
http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html
答案 0 :(得分:60)
我不是一个Groovy人,但我相信你可以这样做:
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5].unique { a, b -> a <=> b }
您是否尝试过session.ids.unique()?
答案 1 :(得分:39)
怎么样:
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]
答案 2 :(得分:13)
使用唯一
def list = ["a", "b", "c", "a", "b", "c"]
println list.unique()
这将打印
[a, b, c]
答案 3 :(得分:7)
def unique = myList as Set
将'myList'转换为Set。当您使用复杂(自定义类)时,请确保您已正确考虑正确实现hashCode()和equals()。
答案 4 :(得分:1)
如果session.ids包含唯一ID,那么您可以这样做:
if(!session.ids)
session.ids = [] as Set
然后当你这样做:
session.ids.add(params.id)
不会添加重复项。
您也可以使用以下语法:
session.ids << params.id
答案 5 :(得分:0)
合并两个数组并使元素唯一:
def arr1 = [1,2,3,4]
def arr2 = [1,2,5,6,7,8]
def arr3 = [1,5,6,8,9]
让我们看一下合并:
arr1.addAll(arr2, arr3)
// [1, 2, 3, 4, [1, 2, 5, 6, 7, 8], [1, 5, 6, 8, 9]]
def combined = arr1.flatten()
// [1, 2, 3, 4, 1, 2, 5, 6, 7, 8, 1, 5, 6, 8, 9]
def combined = arr1.flatten().unique()
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
def combined = (arr1 + arr2 + arr3).flatten().unique()
def combined = (arr1 << arr2 << arr3).flatten().unique()
def combined = arr1.plus(arr2).plus(arr3).flatten().unique()
输出将是:
println combined
[1, 2, 3, 4, 5, 6, 7, 8, 9]