2010-04-08 21 views
5

tengo dos listas:Groovy fusiona dos listas?

listA: 
[[Name: mr good, note: good,rating:9], [Name: mr bad, note: bad, rating:5]] 

listB: 
[[Name: mr good, note: good,score:77], [Name: mr bad, note: bad, score:12]] 

Quiero conseguir éste

listC: 
[[Name: mr good, note: good,, rating:9, score:77], [Name: mr bad, note: bad, rating:5,score:12]] 

¿cómo podría hacerlo?

gracias.

+1

¿De verdad quería dos comas después de bueno en listC? – John

+0

¿Cuándo se consideran iguales los elementos en sus listas? Por ejemplo, ¿qué sucede con los elementos con el mismo 'Nombre' pero diferente' nota'? – stefanglase

+0

listA y listB son mapas, no listas –

Respuesta

4

recogen todos los elementos en listA, y encuentran el elementoA equivilient en listB. Quítelo de la lista B y devuelva el elemento combinado.

Si decimos que su estructura es la de arriba, probablemente haría:

def listC = listA.collect({ elementA -> 
    elementB = listB.find { it.Name == elementA.Name } 

    // Remove matched element from listB 
    listB.remove(elementB) 
    // if elementB == null, I use safe reference and elvis-operator 
    // This map is the next element in the collect 
    [ 
     Name: it.Name, 
     note: "${it.note} ${elementB?.note :? ''}", // Perhaps combine the two notes? 
     rating: it.rating?:0 + elementB?.rating ?: 0, // Perhaps add the ratings? 
     score: it.score?:0 + elementB?.score ?: 0 // Perhaps add the scores? 
    ] // Combine elementA + elementB anyway you like 
} 

// Take unmatched elements in listB and add them to listC 
listC += listB 
+0

Aunque no estoy tratando de hacer exactamente lo que hace el OP, ¡esto me ayudó! ¡Gracias! – djule5

0

El tema de la pregunta es algo general, por lo que voy a publicar respuesta a una pregunta más simple, si alguien tiene aquí buscando para "Cómo combinar dos listas en un mapa en groovy"

def keys = "key1\nkey2\nkey3" 
def values = "value1,value2,value3" 
keys = keys.split("\n") 
values = values.split(",") 
def map = [:] 
keys.eachWithIndex() {param,i -> map[keys[i]] = values[i] } 
print map