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

Kotlin中如何通过associateWith同时过滤空值创建Map?

更简洁的实现方案

你当前的代码里,代码1其实不符合需求——associateWith会保留所有key,哪怕对应的值是null,最终的Map里会存在值为null的条目,没法实现过滤空值的效果。

代码2是可行的,但可以进一步简化,这里提供两种更简洁的写法:

写法1:用mapNotNull结合?.let简化

employeeById.keys.mapNotNull { key ->
    getEmployeeData()?.let { key to EmployeeReport(it) }
}.associate { it }

利用?.let的特性:只有当getEmployeeData()返回非null时,才会生成key和EmployeeReport的键值对,否则返回null;mapNotNull会自动过滤掉这些null值,最后associate直接把键值对集合转成Map。

写法2:用buildMap直观构建

buildMap {
    employeeById.keys.forEach { key ->
        getEmployeeData()?.let { put(key, EmployeeReport(it)) }
    }
}

buildMap是Kotlin标准库提供的构建Map的DSL,遍历每个key后,只有当拿到非null的employeeData时,才调用put往Map里添加条目,逻辑直白,不需要额外的集合转换步骤。

这两种写法都比你原来的代码更简洁,同时完美实现「类似associateWith但过滤空值」的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:25:18