Ответ 1
Я не человек Groovy, но я считаю, что вы можете сделать что-то вроде этого:
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5].unique { a, b -> a <=> b }
Вы пробовали session.ids.unique()?
У меня есть коллекция списков идентификаторов, которые нужно сохранить в базе данных
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
Я не человек Groovy, но я считаю, что вы можете сделать что-то вроде этого:
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5].unique { a, b -> a <=> b }
Вы пробовали session.ids.unique()?
Как насчет:
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]
Используйте уникальный
def list = ["a", "b", "c", "a", "b", "c"]
println list.unique()
Откроется
[a, b, c]
def unique = myList as Set
Преобразует 'myList' в Set. Когда вы используете сложные (самоопределяемые классы), убедитесь, что вы подумали о правильной реализации hashCode() и equals().
Если предполагается, что session.ids содержат уникальные идентификаторы, вы можете сделать следующее:
if(!session.ids)
session.ids = [] as Set
Затем, когда вы выполните:
session.ids.add(params.id)
дубликаты не будут добавлены.
Также вы можете использовать этот синтаксис:
session.ids << params.id