当前位置: 首页 > 知识库问答 >
问题:

GetOrDefult返回数组,我不能改变[重复]

商夜洛
2023-03-14

我有下面的代码

Map<String, List<String> myMap = new HashMap();
...
myMap
  .getOrDefault("key", new ArrayList<>())
  .add("value");

我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。

然而,我看到myContext地图是空的。似乎超级基本,我不明白。

共有2个答案

邢曦
2023-03-14

getOrDefault不会将您作为默认值提供的东西添加到映射中。它只是返回它。

你可能想看看电脑失踪。

如果存在该键,则返回该键的条目,否则返回参数函数

您的代码应该是:

myMap.computeIfAbsent("key", key -> new ArrayList<>()).add("value");
方璞
2023-03-14

getOrDefault()-用于访问值,而不是修改映射。

如果您需要修改映射,您可以改用putIfAbent(),请注意它返回一个先前与键关联的值(如果键不存在,它返回null)。对于您引入的片段,更合适的选项是返回当前值的computeIfAbent()

Map<String, List<String>> myMap = new HashMap<>();
        
myMap.computeIfAbsent("key", k -> new ArrayList<>())
    .add("value");
 类似资料:
  • 我有以下代码 我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。 然而,我看到myContext映射是空的。看起来超基本的,我不明白。

  • 基本上,我试图用一个名为“a”的变量设置数组的长度,并将其声明为3和int。当我试图用for循环查看所有元素时,我不会将“null”作为元素。到现在为止,一直都还不错。然而,当有人想向该数组中添加一个元素时,我会向提到的变量“a”中添加1,从而延长该数组的长度,并允许我向该数组中再添加一个元素。但它不起作用。以下是代码: }

  • 我正在从第三方网站(家庭用电)检索JSON,根据我从网站请求的内容,返回的JSON可能是也可能不是数组。例如,如果我请求我的智能电表列表,我会得到这个(由于尺寸大,结果被截断): 其中 gwrcmd 是单个元素。 但是如果我要求过去半个小时的用电,我会得到这个: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个类似这样的结构(再次,被截断,因为它持续了一段时间。“版本”下有更

  • 我正在写一个函数来计算两个数的最大公分母。我的函数的返回类型是,它的参数是两个s。代码还没有完成,但到目前为止它有两个块。 这是我的代码: IDE显示一个错误。如果我将函数返回类型声明为并使用语句它工作正常。那么,如上所述,当返回类型更改为时,为什么会发生此错误呢? 在返回类型不是的函数中,是否需要每个都有一个?

  • 问题内容: java中有什么方法可以返回新数组而不先将其分配给变量?这是一个例子: 我想做这样的事情,但是不起作用: 问题答案: 即使不将其分配给变量,您仍然需要创建该数组。试试这个: 您的代码示例无效,因为编译器一方面仍然需要知道要通过静态初始化创建的类型。

  • 我遇到了一个类似于将多个表中的数据合并到单行中的问题,同时连接一些值,但我不能理解它,而且我是sql查询的新手。我有很少的表,我必须将它们连接起来,并在一行中得到一些串联的数据。说明如下: 而我运行的查询是: 这个查询的结果是: 我不明白为什么名字和电子邮件是重复的?请帮我解决这个问题,也请你解释一下我在概念上哪里出了问题? 我注意到,当与任务关联的类别数超过一个时,就会出现这个问题。请查看htt