如何在Kotlin中优雅创建仅含非空值的Map且避免可变Map或不安全强转
方案1:使用listOfNotNull (完全匹配你期望的写法风格,无类型强转)
这个方法利用listOfNotNull自动过滤空元素的特性,无需类型转换,全程类型安全:
fun createMap(mandatoryValue: String, optionalValue: String?): Map<String, String> = listOfNotNull( "key1" to mandatoryValue, optionalValue?.let { "key2" to it } ).toMap()
原理说明:当optionalValue为null时,第二个配对元素不会生成,直接为null,listOfNotNull会自动剔除这个空元素,最终转出来的Map天然只包含非空值的键值对,不存在类型安全问题。
方案2:使用buildMap(Kotlin 1.3+ 推荐,逻辑更直观)
如果你使用Kotlin 1.3及更高版本,可以用标准库提供的buildMap函数,内部封装了可变Map构建逻辑,对外返回不可变Map,写法和你原有逻辑几乎一致,无需手动转换类型:
fun createMap(mandatoryValue: String, optionalValue: String?): Map<String, String> = buildMap { put("key1", mandatoryValue) optionalValue?.let { put("key2", it) } }
这个方案在可选键值对数量较多的时候,可读性会更好,性能也和你原有实现一致。
内容的提问来源于stack exchange,提问作者Paul S
相关产品推荐
相关产品推荐

