Kotlin:filterNotNull() 和 withIndex() 但保留预过滤器索引

问题描述 投票:0回答:1

我有一个

val foo: List<Foo?>
,其中包含一些可为空的值。我想将其转换为类似
List<IndexedValue<Foo>>
的内容,其中空值被过滤掉,但它具有 original 索引。

例如,

val foo: List<String?> = listOf("a", null, "b")
应该变成类似的东西
bar: List<Int, String> = [(0, "a"), (2, "b")]

即使在过滤空值之后,我尝试过的一些事情仍然会以

List<Int, String?>
结束。我能想到的最好的似乎有效的是:

foo.mapIndexedNotNull {index, v -> v?.let {index to v}}

有没有更直接一点的?

kotlin
1个回答
0
投票

正如 Ricky Mo 提到的,你可以在这里使用稀疏数组,就像这样

val sparseArray = SparseArray<Foo>()

    foo.forEachIndexed { index, value ->
        value?.let { sparseArray.put(index, it) }
    }
© www.soinside.com 2019 - 2024. All rights reserved.