Kotlin: elimine nulos de uma lista (ou outra transformação funcional)

Problema

Qual é a maneira idiomática de contornar essa limitação da segurança nula no sistema do 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 questão não ésomente sobre a eliminação de nulos, mas também para fazer o sistema de tipos reconhecer que os nulos são removidos da coleção pela transformação.

Eu preferiria não fazer um loop, mas o farei se essa for a melhor maneira de fazer isso.

Gambiarra

O seguinte compila, mas não tenho certeza de que é a melhor maneira de fazer isso:

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)

questionAnswers(1)

yourAnswerToTheQuestion