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

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不会将您作为默认值提供的东西添加到映射中。它只是返回它。

你可能想看看computeIfAbsent。

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

您的代码应该是:

myMap.computeIfAbsent("key", key -> new ArrayList<>()).add("value");
雍志文
2023-03-14

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

如果需要修改映射,可以改用putIfAbsent(),注意它返回一个以前与键关联的值(如果键不存在,则返回null)。对于您介绍的代码段,更合适的选项是返回当前值的computeIfAbsent()。

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

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

  • 问题内容: 我试图从我的主函数返回一个更大的值,例如1000,但是当我键入它时显示0。 如果我返回一个较小的值(如100),它将显示正确的值。 我的代码: 我们可以返回的值是否有限制? 问题答案: 这里有两个相关的概念:C退出状态和bash返回代码。它们都覆盖0-255的范围,但是bash出于自己的目的使用大于126的数字,因此从程序中返回这些值会造成混乱。 为了安全起见,请将退出状态代码限制为0

  • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

  • 问题内容: 我正在从第三方网站(家庭用电)中检索JSON,并且根据我从该站点的要求,返回的JSON可能是数组,也可能不是数组。例如,如果我请求我的智能电表列表,则会得到以下信息(由于尺寸较大,结果被截断了): 其中 gwrcmd 是单个元素。 但是,如果我要求最近半小时用电,则会得到以下信息: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个看起来像这样的结构(再次被截断了一

  • 这里,当我返回一个箭头函数insted时,它不起作用: 我知道箭头函数是松散的,这就是为什么我在这里尝试在括号中返回它。没有他们也不行。