2010-04-08 3 views
5

J'ai deux listes:Groovy fusionne deux listes?

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

Je veux celui

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

comment pourrais-je le faire?

merci.

+1

Voulez-vous vraiment deux virgules après bien dans listC? – John

+0

Quand les éléments de vos listes sont-ils considérés comme égaux? Par exemple, qu'arrive-t-il aux éléments avec le même 'Name' mais différent' note'? – stefanglase

+0

listA et listB sont des cartes, pas des listes –

Répondre

4

collecter tous les éléments de la listeA et trouver l'élémentA équivilent dans la listeB. Supprimez-le de la listeB et renvoyez l'élément combiné.

Si nous disons que votre structure est ce qui précède, je ne serais probablement pas:

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

Même si je n'essaie pas de faire exactement ce que l'OP fait, cela m'a aidé! Merci! – djule5

0

Le sujet de la question est un peu général, donc je vais poster réponse à une question plus simple, si quelqu'un a ici à la recherche pour "Comment fusionner deux listes dans une carte dans 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