我有一个不一定是字符串的对象列表,我想返回一个已大写的字符串列表。
目前,我正在这样做:
// Input : ["foo", "bar"] (not actually strings)
// Expected Output : ["Foo", "Bar"]
// Actual Output : ["foo", "bar"]
// Code:
list.collect { it.toString().capitalize() }
可能是什么问题?如果我在收集时打印出每个元素,它会打印正确的值,但最终列表是错误的。
答案 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"]