我有一段代码如下(简化解释问题)。在rawData中,我想过滤掉那些converter
中没有提供转换器类型的内容,然后对剩下的内容,将data
转换为listitem
data class RawData(val type: String, val data: Data)
interface Converter {
fun convert(data: Data): ListItem
}
fun transform(): List<ListItem> {
val providerTypeMap = modelViewProvider.associateBy({it.type}, {it})
return rawDataList.filter {
converter[it.type] != null
}.map {
converter[it.type]?.create(it.data) ?: object: ListItem {}
}
}
注意:我希望返回类型为List<ListItem>
而不是List<ListItem?>
。为了做到这一点,我需要这一行
converter[it.type]?.create(it.data) ?: object: ListItem {}
我?
和?:
对我来说非常难看,因为我们已经知道,我们已经过滤并且只保留converter[it.type] != null
我有没有办法摆脱代码中的?
和?: ListItem{}
?
答案 0 :(得分:2)
有一个解决方案:
return rawDataList.mapNotNull {
converter[it.type]?.create(it.data)
}
但我不知道哪个Kotlin版本mapNotNull()
方法出现了。如果你没有它,你可以使用构造map {}.filterNotNull()
或编写自己的mapNotNull扩展方法。