2014-03-27 55 views
0

我有三個列表:
HeaderList : [A, B, C]
SubHeaderList : [a1, a2, b1, b2, b3, c1]
HeaderSubHeaderMapping : [2, 3, 1]列出在Groovy

我需要建立一個新的列表,這將是:[A_a1, A_a2, B_b1, B_b2, B_b3, C_c1]
的HeaderSubHeaderMapping給出了SubHeaderList許多副標題如何屬於頭在HeaderList中。
例如:Header A將有2副標題a1a2HeaderSubHeaderMapping
我目前使用此代碼,給了我所需要的輸出指示。

def lHeaderList = ["A", "B", "C"] 
def lSubHeaderList = ["a1", "a2", "b1", "b2", "b3", "c1"] 
def lHeaderSubHeaderMapping = [2, 3, 1] 

def lKeyList = [] 
def lIndex = 0 
for(int i = 0; i < lHeaderList.size(); i++) { 
    for(int j = 0; j < lHeaderSubHeaderMapping.get(i); j++) { 
     lKeyList << (lHeaderList.get(i) + "_" + lSubHeaderList.get(lIndex)) 
     lIndex++ 
    } 
} 
println lKeyList 

但我想知道是否有任何更方便的方法來實現這一目標?

回答

1

這裏是我能想出現在:

int i=0 
def result=[] 

[lHeaderList, lHeaderSubHeaderMapping].transpose().collectEntries {it} 
    .collect {h, t-> t.times {result << "${h}_${lSubHeaderList[i++]}"} }  

println result 

但我認爲這可能會進一步細化。

+0

這是一個不錯的解決方案。 如果我們使用$ {h} _ $ {lSubHeaderList.remove(0)}而不是'$ {h} _ $ {lSubHeaderList [i ++]},我們可以去掉變量'i'。 – rvd