kotlin - Kotlin 忽略地图上的空键
问题描述
我有一个看起来像这样的对象列表:
class Attachment(
val attachmentId: Int,
val attachmentName: String?,
val size: Long
)
我想要一个哈希映射,它使用attachmentName
作为键和整个类作为值。
问题是attachmentName
可以为null,我想忽略这些项目(使用null,attachmentName
这样它们就不会出现在哈希图上)
我想知道在 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()
……但这更长,并创建了更多临时对象。
请注意,某些地图实现不支持空键,因此创建地图然后删除具有空键的项目的替代方法是有风险的,并且取决于确切的实现。
推荐阅读
- sql - 是否可以使用记录集作为 MS Access (VBA) 中的源来运行生成表查询?
- java - MaterialButton 与 Button 的大小差异
- java - 在两台不同的机器上创建 RMI 应用程序时客户端和服务器我们应该在哪里定义我们的接口客户端或服务器端?
- featuretools - 您如何搜索特定功能?
- vagrant - vagrant ssh-config 非常慢
- r - R 字符到日期时间导致 NA
- angular - Angular 7注入服务未设置
- ios - IQKeyboardManagerSwift“共享”不可用:在适当的情况下使用基于视图控制器的解决方案
- r - 在 R 的逻辑回归中使用权重的正确方法是什么?
- shell - 将转录本 ID 和基因符号从 rna fasta 打印到新的文本文件