tes*_*van 0 collections arraylist kotlin kotlin-extension kotlin-null-safety
我需要对我的列表进行一些操作。
例如我有以下列表TestData:
data class TestData (
val value: Int?,
val name: String
)
Run Code Online (Sandbox Code Playgroud)
我需要将列表映射TestData到列表String。这是我的代码:
val names = listOfTestData
.map { data -> getName(data.value) } <- Type mismatch. Required: Int, found Int?
.distinct()
Run Code Online (Sandbox Code Playgroud)
问题是该函数getName(value: Int)仅接受不可为 null 的类型。我可以以某种方式跳过 null 的元素listOfTestData吗value?
我可以在制作地图之前过滤这些值,但我必须在地图内部使用!!,我想要一个更优雅的解决方案。
val names = listOfTestData
.filter { it.value != null }
.map { data -> getName(data.value!!) }
.distinct()
Run Code Online (Sandbox Code Playgroud)
请告诉我如何在不使用的情况下完成此操作!!
filter您可以改为mapNotNulls value。这基本上是 a map,但如果您提供的映射函数返回null,则该元素将被过滤掉。
listOfTestData.mapNotNull { it.value }
.map { getName(it) }
.distinct()
Run Code Online (Sandbox Code Playgroud)
这将重复列表 3 次。您可以通过在 上使用 a 来组合mapNotNull和:map?.letvalue
listOfTestData.mapNotNull { data -> data.value?.let { getName(it) } }.distinct()
Run Code Online (Sandbox Code Playgroud)
或者,使用序列:
listOfTestData.asSequence()
.mapNotNull { it.value }
.map { getName(it) }
.distinct()
.toList()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |