2017-04-07 61 views
0
def map = new HashMap<String,List<String>>() 
def list = new ArrayList<String>() 
def list1 = new ArrayList<String>() 
list.add("hello1") 
list​.add("world1") 
list.add("sample1") 
list.add("sample1")​​​​​​​​​​​​​​​​​​​​​​​​ 
list1.add("hello2") 
list1.add("world2") 
list1.add("sample2") 
list1.add("sample2") 
map.put("abc",list) 
map.put("bcd",list1) 
def data = new ArrayList<String>() 
for(e in map){ 
println "key = ${e.key} value=${e.value}" 
// data = "${e.value} as String[]" 
data = "${e.value}" 
println "size ${data.size()} " --(B) 

check(data) 
​} 
def check(input) 
{ 
println "${input.size()}" ---(A) 
for(item in input){ 
print "$item "​​​​​​​​​​​​​​​​​} 
​}​ 

我必須從這個groovy腳本傳遞string []到另一個java函數。所以我想讀取數組列表,然後將其轉換爲字符串數組。但問題是當我將{e.value}分配給變量data並試圖獲得大小data.size()(步驟(A)和(B))。和size is 34。它將從列表中統計每個字符而不是整個單詞。我想遍歷列表中的每個單詞。請讓我知道如何解決這個問題。問題當迭代使用groovy作爲值的列表

樣本輸出

key = abc value=[hello1, world1, sample1, sample1] 

size 34 
+0

你爲什麼要將你的列表轉換成(G)字符串('data =「$ {e.value}」')?如果您需要傳遞'String []'而不是'List ',您可以簡單地將它'投射':'[「a」,「b」,「c」]作爲String []' – cfrick

+0

'data =「$ {e.value}「'是不需要的。只需使用'data = e.value' –

回答

1

下面是創建地圖和訪問它的groovified vesion:

def map = [abc:['hello1', 'world1','sample1', 'sample1'], bcd:['hello2', 'world2','sample2', 'sample2']] 
map.collect{ println "key: ${it.key}, list: ${it.value}, and size: ${it.value.size()}" } 

輸出:

key: abc, list: [hello1, world1, sample1, sample1], and size: 4 
key: bcd, list: [hello2, world2, sample2, sample2], and size: 4 

如果你想轉換一個列表到一個數組,你可以做到這一點:

def list = ['hello1', 'world1','sample1', 'sample1'] 
assert list instanceof List 
def array = list as String[] 
assert array instanceof String[] 
assert !(array instanceof List)