在一些Groovy代码中,我写了一行
def intCurrentArray = currentVersion.tokenize('.').each({x -> Integer.parseInt(x)})
解析格式化为版本号XX.XX.XX.XX的字符串,并将生成的字符串列表转换为整数列表。但是,Groovy将intCurrentArray推断为字符串列表,导致转换不正确。当我将行更改为:
ArrayList intCurrentArray = []
for (x in currentVersion.tokenize('.'))
intCurrentArray.add(Integer.parseInt(x))
转换工作正常。为什么每种方法都会给出时髦的结果? Groovy不会查看闭包内部以帮助推断intCurrentArray的类型吗?
答案 0 :(得分:1)
each
返回它迭代的相同列表。使用collect
代替从作为参数传递的闭包的每个结果构建一个新列表:
def intCurrentArray = "99.88.77.66".tokenize('.').collect { it.toInteger() }
assert intCurrentArray == [99, 88, 77, 66]
或传播运营商:
def intCurrentArray = "99.88.77.66".tokenize('.')*.toInteger()