Groovy addAll列出了列表

时间:2016-08-25 22:55:21

标签: list groovy

这可能不是最好的问题,但我对可能发生的事情感到好奇。

我在groovy中有这段代码

def markets = []
for (int i = 0; i < marketIds.size(); i += 200) {
    int from = i
    int to = (i + 200) > marketIds.size() ? marketIds.size() : (i + 200)
    markets.addAll(service.getMarketCatalog(args...))
}

markets

service.getMarketCatalog()返回一个对象/地图列表(它是对第三部分API的调用,返回其API中定义的一些对象的列表。我们将它们作为地图)。

由于某种原因,这种方法的结果是市场是列表清单。 因此,如果for循环运行3次并且API每次都使用列表进行响应,则该列表将作为对象添加到市场中。

任何人都有任何想法?也许我必须定义结果是一个列表(即service.getMarketCatalog(args...) as List)否则它被视为一个对象,只是作为一个对象添加到列表中?

1 个答案:

答案 0 :(得分:2)

根据我自己的测试判断...

Object x() { return [1, 2] }
def y = []
y.addAll(x())
y.addAll(x())
println y

Result: [1, 2, 1, 2]

...无论service.getMarketCatalog()的返回类型是什么,即使它只是Object,如果该值确实是List或其他Collection,则addAll具有预期的行为。我在IDE中收到警告,但Groovy显然尝试在运行时将Object转换为Collection并成功。

因此,我只能得出结论:service.getMarketCatalog()实际上并没有像你认为的那样返回单级列表。它必须是列表本身。你必须调查是否真的如此。如果是,那么您当然可以将顶级列表分散到addAll每个子列表:markets.addAll(*service.getMarketCatalog(args...))