首页 > 解决方案 > Kotlin 忽略地图上的空键

问题描述

我有一个看起来像这样的对象列表:

class Attachment(
        val attachmentId: Int,
        val attachmentName: String?,
        val size: Long
)

我想要一个哈希映射,它使用attachmentName作为键和整个类作为值。

问题是attachmentName可以为null,我想忽略这些项目(使用null,attachmentName这样它们就不会出现在哈希图上)

我想知道在 Kotlin 中是否有一个优雅的方法谢谢

标签: kotlin

解决方案


如果您的意思是您不想首先将它们添加到地图中,那么只需在添加之前将它们过滤掉,例如:

val map = myAttachments.filter{ it.attachmentName != null }
                       .associateBy{ it.attachmentName!! }

这有点难看,因为associateBy()不知道attachmentName不能为空,因此如果您希望地图的键类型不可为空,则必须使用!!.

另一种方法是在创建映射的同时进行过滤:

val map = myAttachments.mapNotNull {
        if (it.attachmentName != null)
            attachmentName to it
        else
            null
    }.toMap()

……但这更长,并创建了更多临时对象。

请注意,某些地图实现不支持空键,因此创建地图然后删除具有空键的项目的替代方法是有风险的,并且取决于确切的实现。


推荐阅读