[英]How can I create a Map with non-null values from a set of nullable items in Kotlin?
在 Kotlin 代码中,我想像这样向 map 添加两个字段:
val myMap: Map<Type, List<Parameter>> = mapOf(
Pair(Type.POST, request.postDetails.postParameters),//postDetails can be nullable
Pair(Type.COMMENT, request.commentDetails.commentParameters)//commentDetails can be nullable
)
上面的代码在postDetails.postParameters
和commentDetails.commentParameters
显示错误,因为它们可以为空。
如何像这样就地创建map
而不是创建变量并更新它,我只想在值不是null
的情况下保留该对?
我会为它编写自己的工厂方法,然后调用这些方法。
fun <K, V> mapOfNullableValues(vararg pairs: Pair<K, V?>): Map<K, V> =
pairs.mapNotNull { (k, v) ->
if (v != null) k to v else null
}.toMap()
fun <K, V> mutableMapOfNullableValues(vararg pairs: Pair<K, V?>): MutableMap<K, V> =
pairs.mapNotNull { (k, v) ->
if (v != null) k to v else null
}.toMap(mutableMapOf())
通过编写自己的工厂方法,您可以使用Pair
数组,这比就地修改使用站点要容易得多。
请注意,与内置构建器相比,这些方法会创建一个额外的列表。
我发现没有添加大量额外代码的一种方法是在null
的情况下添加代码以添加emptyList
并稍后删除它们。
像这样的东西:
val myMap: Map<Type, List<Parameter>> = mapOf(
Pair(Type.POST, request.postDetails?.postParameters ?: listOf()),
Pair(Type.COMMENT, request.commentDetails?.commentParameters ?: listOf())//commentDetails can be nullable
).filter{ it.value.isNotEmpty() }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.