将项目添加到地图列表中的 Kotlin 惯用方式

2023-11-22

我有一个MutableMap<String, MutableList<String>我将项目添加到基本上是一个集合,其中相同的键与多个值相关联。

每当我想添加新值时,我需要首先检查是否已经存在与同一键关联的列表,如果不存在则初始化一个列表,然后将该值添加到列表中。

我可以通过以下方式以相当详细的方式做到这一点

if (map.containsKey(key)) {
    map[key].add(value)
} else {
    map[key] = mutableListOf(value)
}

我也可以通过以下方式以非常简洁的方式做到这一点

map[key] = (map[key] ?: mutableListOf()) + mutableListOf(value)).toMutableList()

还有其他几种方式介于冗长与简洁之间。

那么,在 Kotlin 中执行此操作的惯用方法是什么?

我并不是真正追求简洁,而是追求一种可以立即识别和理解的形式。


您可以使用getOrPut

map.getOrPut(key) { mutableListOf() }.add(value)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将项目添加到地图列表中的 Kotlin 惯用方式 的相关文章

  • 在 Scala 中设计方便的默认值映射

    我发现自己使用了很多嵌套映射 例如 Map Int Map String Set String 并且我希望在访问新密钥时自动创建新的 Map Set 等 例如 像下面这样 val m m 1992 foo bar 请注意 如果不需要 我不想
  • 我可以删除单个子实体而不加载整个集合吗?

    我有 2 个课程 如下所示 它们可以拥有非常大的集合 一个网站可能有 2 000 多个网站页面 反之亦然 class WebsitePage public int ID get set public string Title get set
  • kotlin 命令行编译器

    如何使用js命令行编译器 fun main args Array
  • 哪个更快:清除集合或实例化新集合

    我的代码中有一些通用列表 其中有数十或数百个元素 有时我需要用其他对象重新填充此列表 所以问题是 调用什么会更快Clear 方法或创建一个new List
  • Kotlin 反射不可用

    我试图从第一个例子中学习高阶函数video https www youtube com watch v a7QpoMj2uIA 这是我的代码和输出 Code fun lowercase value String value toLowerC
  • 将分页库从 3.0.0-alpha10 更新到 3.0.0-alpha12 时出现运行时错误

    我使用 paging 3 0 0 alpha10 创建了我的 pagingSource 类并且它有效 但是当我将版本更改为 3 0 0 alpha12 时 我收到这个错误 这是运行时异常 java lang AbstractMethodEr
  • 没有重复项的可排序 Java 集合

    我正在寻找可排序 我的意思是在初始化后排序并多次使用比较器 Java 类集合 没有重复项 有没有比编写不透明的代码更纯粹的解决方案 例如防止某些 ArrayList 添加另一个具有与已存在的值相同的值的对象 编辑1 我应该添加一些关于排序的
  • 在Java中打印时差最惯用的方法是什么?

    我熟悉以毫秒为单位的打印时间差 long time System currentTimeMillis do something that takes some time long completedIn System currentTime
  • Java 使用函子连接集合

    给定 2 个具有相同数量元素的集合 例如List
  • Scala 条件列表构造

    我正在使用 Scala 2 9 2 并且想根据某些条件构建一个列表 考虑以下情况 其中 cond 是采用谓词 p 和类型 T 的值 在本例中为 t3 的某个函数 t1 t2 cond p t3 t4 我想要的行为如下 如果 p 为真 则应给
  • Kotlin 等价于三元运算符 [重复]

    这个问题在这里已经有答案了 因此 在 java 中 我们有三元运算符 它有时对于简化 if else 内联计算的某些值很有用 例如 myAdapter setAdapterItems textToSearch length 0 noteLi
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 如何在调用主构造函数之前运行代码?

    我正在编写一个包含两个不可变值的类 它们在主构造函数中设置 我想添加一个辅助构造函数 它接受一个字符串并解析它以获取这两个值 但是 我无法找到在 Kotlin 中实现此功能的方法 因为辅助构造函数在解析字符串之前立即调用主构造函数 在jav
  • 如何使用 let (或 apply 等)检查 2 个条件

    有没有更惯用的方式来编写以下内容 foo let if foo isBlank bar let if bar isBlank println foo and bar both valid strings 基本上这个想法是两个字符串都应该是非
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 加载带有月份标题的 recyclerview 不同类型适配器

    如果从 api 获取不同的月份名称 则尝试将月份名称显示为标题 在这里 我加载月份标题 但是当我加载标题时 它不会加载其他视图 如果数据不同 我需要将月份加载为标题 并且还加载其他视图持有者 我看到一些例子 他们都在 Model 类中使用
  • 如何在 Android 应用程序中每天重复一个操作?

    我每天都想重复一个动作 即使应用程序未运行或设备已重新启动 重新启动 它也必须继续工作 在我的代码中 我尝试每 1 分钟显示一条 TOAST 消息 作为测试 它在模拟器中工作正常 但在真实设备上不起作用 我尝试对修复进行一些更改 正如我在一
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • Kotlin:使用 Picasso 从 flickr 加载图像时出现错误 503

    我的应用程序使用 Android 的 Picasso 库从 flickr 加载图像 奇怪的是 不久前将我的应用程序迁移到 Kotlin 后 它工作得很好 但现在我开始出现 随机 503 错误 我已经在 flickr 控制面板中为每个图像设置
  • Kotlin 中扩展函数的多态性

    我有几个我无法控制的课程 我已经在几个常见的 属性 上创建了几个同名的扩展方法 名称相同的扩展函数始终返回相同的值类型 尽管针对每种类型的接收器以不同的方式计算 这里有一个简化的基于仅一个属性的内置类型的示例 DOES NOT COMPIL

随机推荐

  • 在缩略图悬停时显示更大的图像

    对于图像列表 我有方形缩略图的网址http example com img1 thumb jpg以及原始尺寸 任何比例 http example com img1 jpg 我在网格中显示缩略图 当用户将鼠标放在网格中的图像上时 我想显示原始
  • 如何使用学说在单个查询中获取整个树?

    此片段来自官方网站按预期工作 treeObject Doctrine getTable Category gt getTree rootColumnName treeObject gt getAttribute rootColumnName
  • 将变量从 shell 脚本传递到 applescript

    我有一个 shell 脚本 我称之为使用osascript 然后osascript调用 shell 脚本并传入我在原始 shell 脚本中设置的变量 我不知道如何将该变量从 applescript 传递到 shell 脚本 如何将变量从 s
  • 如何将 ExifInterface 与流或 URI 结合使用

    我正在编写一个应用程序 可以从 Android 中的 共享方式 菜单发送照片 URI 您获得的 URI 类型是content media external images media 556然而ExifInterface想要一个标准的文件名
  • git rebase 删除提交

    我的 git 存储库中有以下更改历史记录 X Y Z A B C 我从代码 Z 的基础开始工作 并进行了 A B 和 C 三个更改 这些更改中的每一个都已作为单独的评论上传到 Gerrit 上 并且每个更改都取决于之前的更改 经过审查后 我
  • 视频元素在 IE8 中不显示?

    我想在所有浏览器中嵌入视频元素 但它在除 IE8 之外的所有浏览器中都可以正常工作 这里 我使用 mediaelement js 库来实现 首先 需要尝试以下几件事 确保 IE8 上安装了 Flash 这是旧版浏览器中 Mediaeleme
  • 无法在 Android Studio 中打开密钥库 - “找到冗余长度字节”

    我无法在 Android Studio 中打开现有的密钥库文件或使用jarsigner从命令行 在这两种情况下 错误消息都是 java security cert CertificateException 无法初始化 java io IOE
  • 如何让 AngularJS BLOB 下载 PDF?

    大家好 我对使用 AngularJS 进行开发非常陌生 我正在尝试弄清楚如何使用 BLOB 将 PDF 下载到本地计算机 我已经让它可以使用 JSON 现在我需要一个 PDF 我写了一些代码 但它似乎不起作用 html
  • 如何知道opencv中SSE2是否激活

    我有一个版本的 OpenCV 2 4 10 库 它是为 Windows 上的 Intel X64 构建的 我如何知道 CV SSE2 是否处于活动状态 我没有代码 我只有库 DLL 和标头 Thanks 您可以使用该功能检查SSE2是否启用
  • 如何在文档的 部分创建 Angular 指令?

    我是新来的angular js 我正在尝试创建一个指令来添加一些标题和元标记html 文档的一部分 但我遇到了一些麻烦 My index html文件如下
  • Rails 3 - Amazon S3 Paperclip EU 问题

    我在用着 Paperclip 2 3 16 Rails 3 0 9 Ruby 1 9 2 AWS S3 0 6 2 我正在尝试使用回形针上传到基于欧盟 爱尔兰 的存储桶 我的模型中有以下内容 has attached file image
  • 在其他项目中重用 Cucumber-JVM 步骤定义

    如何在其他项目中重用 Cucumber JVM 步骤定义来测试一些典型的 Web 操作 重点是 我创建了一些 java 项目 仅使用典型场景操作的步骤定义实现 例如 When I follow the link some link Then
  • Razor HTML 条件输出

    我有一个要作为主内容输出的项目列表 下面不包括主内容 每个项目都有 3 个属性 部分名称 标签和值 每个项目都包含在 a 中 每次部分名称更改时 我都必须打开 a 并关闭前一个 如果有的话 我正在使用带有以下代码的 Razor 视图 for
  • 保存为表单中的文件

    使用 Canvas 方法 toDataURL 我希望能够将图像保存在服务器端 使用 Rails 有了 toDataURL 字符串 如何在 HTML 表单中可以将其视为文件附件的表单中使用它 使用 jQuery Paperclip dataf
  • Intl.DateTimeFormat 返回超过 24 小时

    我有以下 Unix 时间戳 1611328500000 Fri Jan 22 2021 10 15 00 GMT 0500 Eastern Standard Time 我需要以韩国标准时间显示它 为此 我正在使用Intl DateTimeF
  • 在 Chrome 中拦截对 console.log 的调用

    我有一个无法更改的脚本 它会产生很多console log来电 我想添加另一层并在调用包含某些字符串时进行响应 这在 Firefox 中有效 但会抛出 Illegal invocation Chrome 中第 4 行出现错误 var old
  • 在 ERB 块中的字符串内包含 ERB 分隔符

    我正在编写一个显示代码以及输出的样式指南 目前它的结构使得代码只需要描述一次 并以原始版本和解释版本显示 如下所示
  • C/C++ 中的简单虚拟文件系统

    我想实现一个非常简单的虚拟文件系统 VFS 它支持一些基本的文件系统操作 例如 fwrite fopen fput 等 VFS 是某些具体操作系统之上的抽象层 例如Windows Linux 等 现在假设 fopen 界面看起来像这样 FI
  • 为什么 ORACLE 不允许在命令中使用连续的换行符?

    I write CREATE TABLE Person name CHAR 10 ssn INTEGER 并将其保存到文件 a sql 如果我然后通过在 SQL Plus 命令提示符中键入 a 来运行它 它会告诉我以 ssn 开头的行不被识
  • 将项目添加到地图列表中的 Kotlin 惯用方式

    我有一个MutableMap