我需要对我的列表进行一些操作。
例如,我有TestData
的列表:
data class TestData (
val value: Int?,
val name: String
)
我需要将TestData
的列表Map到String
的列表。
val names = listOfTestData
.map { data -> getName(data.value) } <- Type mismatch. Required: Int, found Int?
.distinct()
问题是函数getName(value: Int)
只接受一个不可空的类型,我能跳过listOfTestData
中value
为空的元素吗?
我可以在绘制Map之前过滤这些值,但是我必须在Map内部使用!!
,我想要一个更优雅的解决方案。
val names = listOfTestData
.filter { it.value != null }
.map { data -> getName(data.value!!) }
.distinct()
请告诉我如何在不使用!!
的情况下完成此操作
1条答案
按热度按时间e4yzc0pl1#
您可以将
mapNotNull
转换为value
,而不是filter
。这基本上是一个map
,但如果您提供的Map函数返回null
,则该元素将被过滤掉。这将遍历列表3次。您可以通过在
value
上使用?.let
来合并mapNotNull
和map
:或者,使用序列: