java - 为什么 Collectors.toMap (在 JDK8 java.util.stream 中)不允许使用相同的密钥?
问题描述
如果我们将两个 kv 对放入具有相同键的 hashmap 中,则第二个值将覆盖第一个值。但是如果我们通过 Collectors.toMap 执行此操作,它将抛出异常并显示消息:“重复键”。
我知道如何解决它,但我想知道为什么收藏家会这样设计。
解决方案
使用map.put(key, value)
,即使新条目替换现有条目,您也不会丢失任何信息。那是因为该方法返回旧值,所以如果您不使用返回值,您只会丢失信息,并且该方法无法检测您是否使用,并且它们不能强迫您。
使用Collectors.toMap(keyMapper, valueMapper)
,如果存在重复键,信息将丢失。为了安全起见,它将通过抛出异常来拒绝重复的键。您可以通过提供 amergeFunction
作为第三个参数来显式忽略旧值来接受重复键,例如使用 lambda 表达式(a,b) -> b
丢弃旧值。在这里,他们有能力强迫你考虑这个问题。
推荐阅读
- assembly - MIPS ASSEMBLY,打印值,突然中断
- postgresql - Postgres 错误 [列必须出现在 GROUP BY 子句中或在聚合函数中使用]
- r - R dplyr 根据先前值和另一列中的值添加值
- python - 空闲python Mac上的ffmpeg
- python-3.x - 如何解决这个 python 代码错误:TypeError: object of type 'int' has no len()
- javascript - 未捕获的 ReferenceError:未定义 notifySuccess
- android - 浮动操作按钮不显示矢量资产
- php - 在一行中回显
- sql - ORACLE 选择查询,按大小写 ASC 和 DESC 排序
- php - 遇到错误严重性:非法字符串偏移 Codeigniter