在Kotlin中检查map函数中的null

我是Kotlin的新手,我想将一个对象(ProductVisibility)映射到另一个对象(fmpProduct)上。 有些对象不能转换,所以我需要在某些条件下跳过它们。

我想知道是否有更好的方法来做到这一点比我做过滤器和“!!” 我觉得它被黑了。 我错过了什么吗?

val newCSProductVisibility = fmpProducts .filter { parentIdGroupedByCode.containsKey(it.id) } .filter { ProductType.fromCode(it.type) != null } //voir si on accumule les erreus dans une variable à montrer .map { val type = ProductType.fromCode(it.type)!! //Null already filtered val userGroupIds = type.productAvailabilityUserGroup.map { it.id }.joinToString(",") val b2bGroupIds = type.b2bUserGroup.map { it.id }.joinToString { "," } val b2bDescHide = !type.b2bUserGroup.isEmpty() val parentId = parentIdGroupedByCode[it.id]!! //Null already filtered CSProductDao.ProductVisibility(parentId, userGroupIds, b2bGroupIds, b2bDescHide) } 

编辑:更新地图访问像评论建议

使用mapNotNull()来避免filter()并执行mapNotNull()块中的所有内容,然后将自动类型转换non-null类型。 例:

 fun f() { val list = listOf<MyClass>() val v = list.mapNotNull { if (it.type == null) return@mapNotNull null val type = productTypeFromCode(it.type) if (type == null) return@mapNotNull null else MyClass2(type) // type is automatically casted to type!! here } } fun productTypeFromCode(code: String): String? { return null } class MyClass(val type: String?, val id: String) class MyClass2(val type: String)