2010-04-08 19 views
5

Ho due liste:Groovy unire due liste?

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]] 

voglio ottenere questo

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

come potrei farlo?

grazie.

+1

Volevate davvero due virgole dopo averlo inserito in listC? – John

+0

Quando gli elementi nelle tue liste sono considerati uguali? Ad esempio cosa succede agli elementi con lo stesso 'Nome' ma diversa' nota'? – stefanglase

+0

elencoA e elencoB sono mappe, non elenchi –

risposta

4

raccoglie tutti gli elementi nell'elencoA e trova l'elementoA equiviloente in elencoB. Rimuovilo da listB e restituisci l'elemento combinato.

Se diciamo la vostra struttura è il sopra, avrei probabilmente fare:

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

Anche se non sto cercando di fare esattamente ciò che l'OP sta facendo, questo mi ha aiutato! Grazie! – djule5

0

L'oggetto della questione è un po 'generale, quindi dovrò inviare risposta a una domanda più semplice, se qualcuno ha qui in cerca per "Come unire due liste in una mappa in 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