Kotlin: Nullen aus einer Liste entfernen (oder andere funktionale Transformation)
Proble
Was ist die idiomatische Art, um diese Einschränkung der Nullsicherheit im Kotlin-Typ-System zu umgehen?
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 }
Diese Frage ist nichtgerad zum Entfernen von Nullen, aber auch, um das Typsystem erkennen zu lassen, dass die Nullen durch die Umwandlung aus der Auflistung entfernt werden.
Ich würde es vorziehen, nicht zu schleifen, aber ich werde es tun, wenn das der beste Weg ist, es zu tun.
Work-AroundDie folgenden Kompilierungen, aber ich bin nicht sicher, ob dies der beste Weg ist:
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)