traduccion - Cómo eliminar valores duplicados de una lista en groovy
groovy traduccion (5)
Tengo una colección de lista de identificación para guardar en la base de datos
if(!session.ids)
session.ids = []
session.ids.add(params.id)
y descubrí que esa lista tiene duplicados, como
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5]
Luego quise eliminar todos los duplicados aplicando algo como:
session.ids.removeAll{ //some clousure case }
Solo encontré esto:
http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html
No soy una persona Groovy, pero creo que puedes hacer algo como esto:
[1, 2, 4, 9, 7, 10, 8, 6, 6, 5].unique { a, b -> a <=> b }
¿Has probado session.ids.unique() ?
Qué tal si:
session.ids = session.ids.unique( false )
Actualizar
Diferenciación entre unique()
y unique(false)
: el segundo no modifica la lista original. Espero que ayude.
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]
Si se pretende que session.ids contenga identificadores únicos, puede hacer lo siguiente:
if(!session.ids)
session.ids = [] as Set
Entonces cuando lo haces:
session.ids.add(params.id)
los duplicados no serán agregados.
También puedes usar esta sintaxis:
session.ids << params.id
Use un único
def list = ["a", "b", "c", "a", "b", "c"]
println list.unique()
Esto se imprimirá
[a, b, c]
def unique = myList as Set
Convierte ''myList'' en un conjunto. Cuando use clases complejas (autodefinidas), asegúrese de haber pensado en implementar hashCode () y equals () correctamente.