Groovy脚本:列表/映射集合

Groovy脚本:列表/映射集合,groovy,Groovy,为了进行sprint测试,我创建了一个脚本,用于模拟SOAP UI中SOAP服务的行为(作为模拟服务),但在尝试迭代我创建的列表时遇到了问题。该列表由多个地图组成,每个地图都包含一个列表。它应该是这样的: [[Rec: 1, Items: ["AB123","BC234","CD345"]],[Rec: 2, Items: ["AB123","BC234","CD345","DE456"]]] 这是我必须建立列表的代码: def offerMap = [:] def outputL

为了进行sprint测试,我创建了一个脚本,用于模拟SOAP UI中SOAP服务的行为(作为模拟服务),但在尝试迭代我创建的列表时遇到了问题。该列表由多个地图组成,每个地图都包含一个列表。它应该是这样的:

[[Rec: 1, Items: ["AB123","BC234","CD345"]],[Rec: 2, Items: ["AB123","BC234","CD345","DE456"]]]
这是我必须建立列表的代码:

def offerMap      = [:] 
def outputList    = [] 
def offerItemList = [] 

def outputMap     = [:] 
def outList       = [] 

def item          = "" 
def rec           = "" 

offerItemList.add("AB123") 
offerItemList.add("BC234") 
offerItemList.add("CD345") 

offerMap.put("Rec",1) 
offerMap.put("Items",offerItemList) 

outputList.add(offerMap) 

log.info "OUT: outputList.size ${outputList.size()}" 
log.info "OUT: offerItemList.size ${offerItemList.size()}" 

offerMap.clear() 
offerItemList.clear() 

offerItemList.add("AB123") 
offerItemList.add("BC234") 
offerItemList.add("CD345") 
offerItemList.add("DE456") 

offerMap.put("Rec",2) 
offerMap.put("Items",offerItemList) 

outputList.add(offerMap) 

log.info "OUT: outputList.size ${outputList.size()}" 
log.info "OUT: offerItemList.size ${offerItemList.size()}" 
这是我必须迭代列表的代码:

outputList.each { 

    log.info "OUT: outputList.size ${outputList.size()}" 

    outputMap.clear() 
    outputMap = it 

    rec = outputMap.get("Rec") 
    log.info "OUT: REC ${rec}" 

    outList.clear() 
    outList = outputMap.get("Items") 

    outList.each { 

        item = it 
        log.info "OUT: Item ${item}" 

    } 
}
但这并没有给我预期的结果。第一个问题是
输出列表。每个
循环似乎立即跳转到列表中的第二个条目,从输出可以看出:

Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 1 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: offerItemList.size 3 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: offerItemList.size 4 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: REC 2 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item AB123 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item BC234 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item CD345 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item DE456 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2 
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: REC null 

我的想法越来越少,担心由于缺乏Groovy的经验,我可能会错过一些基本的东西。

考虑以下几点。请注意,目标并不完全清楚,但这是一个有根据的猜测(在顶部示例中,
Rec
Row
之间也不清楚)

输出:

$ groovy Example.groovy
OUT ROW: 1
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT ROW: 2
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT Item: DE456

您正在添加列表,然后清除它并再次添加它。这是相同的清单。每次为每个元素创建一个新列表为什么不像问题中那样定义它呢<代码>[Rec:1,项:[“AB123”、“BC234”、“CD345”]],…等
您似乎需要根据收到的请求构建模拟服务响应。您介意显示输入和期望的输出吗?我的问题是,offerItemList列表是基于我正在执行的迭代动态构建的(示例中未显示以降低复杂性)。由于这个原因,我不能预先定义列表;我必须定义一个空的offerItemList,然后在迭代中继续添加它。一旦所有的项目(对于那个特定的迭代)被添加到offerItemList,我就想将offerItemList添加到offerMap,然后将offerMap添加到outputList。然后对下一组offer项重复这个过程……我想我理解了这个问题,当我将offerItemList添加到offerMap时,我添加的是一个指针,而不是列表的内容。类似地,当我向outputList添加offerMap时,我也添加了一个指针,而不是实际的映射内容(这就是为什么我在outputList中有两个完全相同的条目)。只需要了解我如何添加offerItemList/offerMap的内容,而不仅仅是指针……嗨,Michael,谢谢你花时间回复,非常感谢。对row/rec混乱表示歉意,将其从row更改为rec,但显然没有将其全部捕获,现已修复。我会尝试一下您的建议,再次感谢。我快速浏览了一下,认为这对我来说不合适,因为我正在动态构建offerItemList/offerMap(因此无法预先定义它们)。晒到绘图板上!你可能应该删除这个问题。最初不是100%清楚,现在也肯定不是了。那评论真的有必要吗?如果我的评论粗鲁,我道歉。堆栈溢出具有使web成为更好地方的精神。现在的问题是模糊的,你关于“动态”的评论似乎是一个新的要求。这篇文章对新读者有什么价值?如果人们(像我一样)花时间试图帮助你,却错过了评论/新要求,该怎么办?如果您仍然寻求帮助,则应澄清原始问题;否则考虑删除它。
$ groovy Example.groovy
OUT ROW: 1
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT ROW: 2
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT Item: DE456