Kotlin: eliminar nulos de una lista (u otra transformación funcional)

Problema

¿Cuál es la forma idiomática de evitar esta limitación de la seguridad nula en el sistema de tipo Kotlin?

val strs1:List<String?> = listOf("hello", null, "world")

// ERROR: Type Inference Failed: Expected Type Mismatch:
// required: List<String>
// round:    List<String?>
val strs2:List<String> = strs1.filter { it != null }

Esta pregunta no essólo sobre la eliminación de nulos, pero también para hacer que el sistema de tipos reconozca que la transformación elimina los nulos de la colección.

Prefiero no repetir, pero lo haré si esa es la mejor manera de hacerlo.

Work-Around

Lo siguiente se compila, pero no estoy seguro de que sea la mejor manera de hacerlo:

fun <T> notNullList(list: List<T?>):List<T> {
    val accumulator:MutableList<T> = mutableListOf()
    for (element in list) {
        if (element != null) {
            accumulator.add(element)
        }
    }
    return accumulator
}
val strs2:List<String> = notNullList(strs1)

Respuestas a la pregunta(1)

Su respuesta a la pregunta