这个扩展 属性 是如何将字符串中每个单词的首字母大写的?

How does this extension property to capitalize the first letter of every word in a string work?

我最近正在尝试学习 kotlin(来自 java)并完成了一些初学者编码挑战。

任务是编写一个函数,将字符串中每个单词的首字母大写

我可以用我自己的方式解决这个任务,但我还是不明白这个示例解决方案:

fun capitalizeSentence(str: String) {
     println(str.split(" ").joinToString(" ") { it.capitalize() })
}

有人可以向我解释一下,为什么这个 lambda 表达式设法将每个单词的首字母大写,即使在 split 方法之后立即使用 joinToString 方法也是如此?

joinToString() 接受一个可选的 transform 函数,它在 加入 之前应用于每个项目。您可能会感到困惑,因为此代码执行操作的顺序与代码流本身不同。此代码实际上等效于此代码:

str.split(" ")
    .map { it.capitalize() }
    .joinToString(" ")