如何从地图返回非空项目的列表映射?
我有一段代码如下(简化来解释这个问题)。 从rawData中,我想过滤出那些没有在converter
器中提供的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{}
在我的代码?
有一个解决方案:
return rawDataList.mapNotNull { converter[it.type]?.create(it.data) }
但是我不知道Kotlin的版本mapNotNull()
方法出现了。 如果你没有它,你可以使用施工map {}.filterNotNull()
或编写你自己的mapNotNull扩展方法。
- () – >单位和(单位) – >单位类型有什么区别?
- 在Kotlin中实现链表
- Kotlin泛型:Kotlin不承认我的类具有正确的继承
- 将Java Collection.toArray转换为kotlin
- 如何在Kotlin中使用递归类型
- Tornadofx tableview同步两个表
- Spring Boot:添加@Transactional会产生java.lang.ClassNotFoundException:org.aspectj.util.PartialOrder $ PartialComparable
- 当在Java对象的Kotlin中设置属性时,奇怪的“Val不能被重新分配”错误
- Spring WebFlux:只有一个连接接收用户允许