You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何原地创建仅包含非空值项的Map?

解决Kotlin中创建非空键值对Map的问题

因为postDetails和commentDetails是可空类型,直接访问它们的属性会触发空安全报错,要原地创建只保留非空值的Map,可以用以下两种方式:

方式一:使用buildMap构建器(推荐)

buildMap是Kotlin标准库提供的Map构建函数,能在lambda里直接完成Map的构建,同时处理可空判断:

val myMap: Map<Type, List<Parameter>> = buildMap {
    // 仅当postDetails非空时,添加POST对应的键值对
    request.postDetails?.let { put(Type.POST, it.postParameters) }
    // 仅当commentDetails非空时,添加COMMENT对应的键值对
    request.commentDetails?.let { put(Type.COMMENT, it.commentParameters) }
}

这种写法逻辑清晰,后续要加更多键值对时直接在lambda里追加即可,完全不需要额外变量修改。

方式二:用列表过滤后转Map

如果喜欢更简洁的写法,可以先生成包含可空Pair的列表,过滤掉null后转成Map:

val myMap: Map<Type, List<Parameter>> = listOf(
    request.postDetails?.let { Type.POST to it.postParameters },
    request.commentDetails?.let { Type.COMMENT to it.commentParameters }
).filterNotNull().toMap()

这里?.let会在对象非空时生成对应的键值对,否则返回null,filterNotNull会剔除所有null元素,最后toMap()把列表转成Map。

内容的提问来源于stack exchange,提问作者Light Yagami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:10:39