如何从地图返回非空项目的列表映射?
我有一段代码如下(简化来解释这个问题)。 从rawData中,我想过滤出那些没有在converter
器中提供的converter
器types,然后剩余的将data
转换为listitem
data class RawData(val type: String, val data: Data) interface Converter { fun convert(data: Data): ListItem } fun transform(): List { val providerTypeMap = modelViewProvider.associateBy({it.type}, {it}) return rawDataList.filter { converter[it.type] != null }.map { converter[it.type]?.create(it.data) ?: object: ListItem {} } }
注意:我希望返回types为List
而不是List
。 为了做到这一点,我需要有这条线
converter[it.type]?.create(it.data) ?: object: ListItem {}
哪个给我?
和?:
是非常难看的,因为我们知道那时候,我们已经过滤了,只保留那个converter[it.type] != null
有没有办法让我摆脱?
和?: ListItem{}
在我的代码?
有一个解决方案:
return rawDataList.mapNotNull { converter[it.type]?.create(it.data) }
但是我不知道Kotlin的版本mapNotNull()
方法出现了。 如果你没有它,你可以使用施工map {}.filterNotNull()
或编写你自己的mapNotNull扩展方法。