这可能不是最好的问题,但我对可能发生的事情感到好奇。
我在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
)否则它被视为一个对象,只是作为一个对象添加到列表中?
答案 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...))