2010-04-08 4 views
5

İki listeleri vardır:Groovy iki liste birleştirir?

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

Bir

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

bunu nasıl yapabilirdi bu almak istiyor?

Teşekkürler.

+1

ListC'de iyi olduktan sonra gerçekten iki virgül mü istediniz? – John

+0

Listelerinizdeki öğeler ne zaman eşit kabul edilir? Örneğin, aynı adı taşıyan ama farklı 'not'lu elemanlara ne olur? – stefanglase

+0

listA ve listB haritalar değil, listeler –

cevap

4

listA'daki tüm öğeleri toplayın ve listB'de elementA denklemini bulun. ListB'den çıkarın ve birleştirilmiş elemanı döndürün. biz yapı üzerindedir derseniz

, muhtemelen yapacağını:

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

OP'in ne yaptığını yapmaya çalışmamama rağmen, bu bana yardımcı oldu! Teşekkürler! – djule5

0

soru konu biraz geneldir, yani herkes seyir burada var eğer ben bir daha basit sorunun cevabını göndeririz "İki listeyi bir arada bir haritaya nasıl dahil edersiniz?"

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