【问题标题】:issues when Iterate Map with list as value using groovy使用 groovy 将列表作为值迭代 Map 时的问题
【发布时间】:2017-09-02 07:58:43
【问题描述】:
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。它从列表中计算每个字符而不是整个单词。我想遍历列表中的每个单词。请让我知道如何解决这个问题。

样本输出为

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

size 34

【问题讨论】:

  • 为什么要将列表转换为 (G)String (data = "${e.value}")?如果您需要传递 String[] 而不是 List&lt;String&gt; 您可以简单地“转换”它:["a","b","c"] as String[]
  • data = "${e.value}" 不需要。只需使用data = e.value

标签: list groovy hashmap


【解决方案1】:

这是创建和访问地图的常规版本:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-18
    • 2012-03-20
    • 2018-01-27
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多