Kotlin - How to convert a list of objects into a single one after map operation?

Solution 1:

You can simply use a the spread operator (*) over an array:

val mappedCarParts = carParts
    .map { it.description.toUpperCase() }
    .map { CarPart(it) }
    .toTypedArray()

val car = Car(*mappedCarParts)

// Or even:

val car = carParts
    .map { it.description.toUpperCase() }
    .map { CarPart(it) }
    .toTypedArray()
    .let{ Car(*it) }

Solution 2:

You could just extract the constructor of the Car outside of the creation of the list. I don't see any reason as to why you'd want it inside.

val car = Car(
        *carParts
            .map { CarPart(it.description.uppercase(Locale.getDefault())) } //keep the .toUpperCase() if you are using an old version of Kotlin
            .toTypedArray()
    )

We need the spread operator there in order for the vararg to know that we are passing it the elements of the list and not the list itself.