Groovy collect()闭包不用于大写字符串

时间:2017-07-24 14:25:54

标签: string groovy closures

我有一个不一定是字符串的对象列表,我想返回一个已大写的字符串列表。

目前,我正在这样做:

// Input : ["foo", "bar"] (not actually strings)
// Expected Output : ["Foo", "Bar"]
// Actual Output : ["foo", "bar"]

// Code: 
list.collect { it.toString().capitalize() }

可能是什么问题?如果我在收集时打印出每个元素,它会打印正确的值,但最终列表是错误的。

2 个答案:

答案 0 :(得分:3)

collect不会改变原始列表,但会返回一个新列表:

def oringinal = ["foo", "bar"]
def capitalized = original.collect { it.capitalize() }
println(capitalized) // ["Foo", "Bar"]

PS:您也可以使用*.点差运算符,如下所示:

def capitalized = original*.capitalize()

答案 1 :(得分:1)

您怀疑.collect()方法会改变输入列表,但不会 - 它会创建列表的副本,并且不会更改输入列表中的任何内容。

def list = ["foo", "bar"]

def newList = list.collect { it.toString().capitalize() }

assert list != newList

assert newList == ["Foo", "Bar"]