Search code examples
kotlinlambdacapitalize

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


I'm recently trying to get into kotlin (coming from java) and did some beginner coding challenges.

The task is to write a function that capitalizes the first letter of every word in a string

I could solve the task in my own way, but I still don't understand this sample solution:

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

Can someone explain to me, why this lambda expressions manages to capitalize the first letter of every word, even when using the joinToString method right after the split method?


Solution

  • joinToString() accepts an optional transform function which it applies to each item before joining. It might be confusing to you, because this code performs operations in a different order than the code flow itself. This code is effectively an equivalent of this one:

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