具有可能为空值的Kotlin映射器

时间:2019-06-14 09:45:07

标签: kotlin nullable mapper

我有一堆数据类,其值必须为空,因为某些字段数据库可能会返回null。

但是,当映射到ApiClass时,这些值应替换为空字符串或某些Long值(无null)

但是我不知道如何将Long?变成Long

例如在我的mapper中

dueDilligence.info.extendedInfo.income.let { it }

据我所知,如果Long是实际的long而不是null,则仅应将此值传递给ApiClass构造函数,如果为null我将假定它将保留为Constructos中给出的默认值(在这种情况下为0)

dueDilligence.info.extendedInfo.income是一个Long,也可能为null,但如果为null,则应将其映射为0。

但是由于数据类为Long?并且映射器为Long,存在类型不匹配,我似乎无法用letrun

解决

我也可以写if( attribute == null ) { } 但这会产生太多多余的代码,因为有大约50个属性。

1 个答案:

答案 0 :(得分:0)

您可以使用以下两个示例,第一个示例是将空值替换为“ 0”,第二个示例是从列表中删除空值:

val list = listOf<Long?>(null, 0L, 20L, 15L, 13L, 20L, null, null, 30L, 45L)
fun main(args: Array<String>){
   val listA = list.map { it ?: 0 }

   val listB = list.mapNotNull { it }

   println(listA)
   println(listB)
}

输出为:

  List A [0, 0, 20, 15, 13, 20, 0, 0, 30, 45]
  List B [0, 20, 15, 13, 20, 30, 45]