当前位置: 首页 > 面试题库 >

在Java8函数样式中,如何将值映射到已存在的键值对

漆雕亮
2023-03-14
问题内容

我有一张地图:

Map<String, List<Object>> dataMap;

现在,我想向地图添加新的键值对,如下所示:

if(dataMap.contains(key)) {
    List<Object> list = dataMap.get(key);
    list.add(someNewObject);
    dataMap.put(key, list);
} else {
    List<Object> list = new ArrayList();
    list.add(someNewObject)
    dataMap.put(key, list);
}

我该如何使用Java8功能样式来做到这一点?


问题答案:

您可以使用computeIfAbsent

如果不存在映射,则只需将密钥与新的空列表相关联即可创建一个,然后将值添加到其中。

dataMap.computeIfAbsent(key, k -> new ArrayList<>()).add(someNewObject);

如文档所述,它将返回与指定键关联的当前(现有或计算得出的)值,因此您可以将调用与链接起来ArrayList#add。当然,这是假设原始地图中的值不是固定大小的列表(我不知道您如何填充它)…

顺便说一句,如果您有权访问原始数据源,则可以从中获取流并Collectors.groupingBy直接使用。



 类似资料:
  • 输入: 输出: 输入: 线程“main”java.lang.IllegalStateException中的异常:重复键-1.0 我怎么才能修好这个?

  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是:

  • 假设我有这个命令代码: 我该如何以函数式的方式写这篇文章(就像fold在Scala中做的那样)?

  • 问题内容: 晚间! 我有以下地图: 然后,我向其中添加了以下数据: 这给我留下了以下数据: 关键: 测试 值: 测试1,测试2,测试3 我的问题是,如何将新值添加到我现有的键上?因此,例如,如何将值“ Test 4”添加到键“ Tests”上。 谢谢。 问题答案: 只需从地图上获取列表,然后将元素添加到列表中即可: 关于您的代码,还有一些其他事项需要注意。首先,不要使用raw类型 。使用泛型: 其

  • 我在Spark中有一个数据框,看起来像这样: 它有30列:只显示其中的一些! 因此,我必须在Scala中将这个数据帧转换成一个键值对,使用键作为数据帧中的一些列,并为这些键分配从索引0到计数(不同的键数)的唯一值。 例如:使用上面的案例,我希望在Scala中的map(key-value)集合中有一个输出,如下所示: 我对斯卡拉和斯帕克是新手,我试着做这样的事情。 但是,这不起作用。:/此操作完成后

  • 如何在spacevim中将“esc”键映射到“jk”或“jj”?spacevim的配置文件是什么。有什么传奇的spacevim配置可以分享吗?