在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)