我有一个
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}}
有没有更直接一点的?
正如 Ricky Mo 提到的,你可以在这里使用稀疏数组,就像这样
val sparseArray = SparseArray<Foo>()
foo.forEachIndexed { index, value ->
value?.let { sparseArray.put(index, it) }
}