从kotlin中的集合中过滤掉非空值

sag*_*aga 3 null nullable kotlin kotlin-null-safety

看看这个kotlin one liner:

val nonNullArr : List<NonNullType> = nullArray.filter {it != null}
Run Code Online (Sandbox Code Playgroud)

编译器在此行给出类型错误,表示无法将空列表分配给非空值列表.但过滤条件确保列表仅包含非空值.有没有类似于!!运算符的东西,我可以在这种情况下使用这个代码编译?

for*_*pas 6

假设编译器会考虑谓词似乎是合乎逻辑的

it != null
Run Code Online (Sandbox Code Playgroud)

并推断出类型

List<NonNullType>
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.
有两种解决方案:

val nonNullList: List<NonNullType>  = nullableArray.filterNotNull()
Run Code Online (Sandbox Code Playgroud)

要么

val nonNullList: List<NonNullType>  = nullableArray.mapNotNull { it }
Run Code Online (Sandbox Code Playgroud)