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

如何使Map::get返回找到的值的可选值或Optional.empty()

太叔景同
2023-03-14

我正在尝试这样做:

return Optional.of(myMap.getOrDefault(myKey, null));

实际上,我想要的是返回一个可选的。of(foundVal)如果找到,否则为可选。空()。我不认为这是可选的。of(null)等于该值。我想用什么语法?

也就是说,如何获取映射以返回正确的可选映射?

共有3个答案

呼延震博
2023-03-14

功能性和绝对过长的解决方案:

myMap.entrySet().stream()
  .filter(it -> it.getKey().equals(myKey))
  .findFirst()
  .map(Map.Entry::getValue);
黄博艺
2023-03-14

这个

Optional.of(myMap.getOrDefault(myKey, null));

或者说真的

Optional.of(null);

如果出现NullPointerException,则会失败。正如javadoc所述

抛出:NullPointerException-如果值为null

当您不知道要传递给它的值是否为空时,将存在可选的空值:

参数:
-描述的可能为空值

由于给定键没有条目时,Map#get(Object)已经返回null

返回指定键映射到的值,如果此映射不包含键的映射,则返回null

您不需要使用默认值为null的getOrDefault。您可以直接使用

Optional.ofNullable(myMap.get(myKey));
公冶阳德
2023-03-14

为什么不简单:

return Optional.ofNullable(myMap.get(myKey));

JavaDocs

 类似资料:
  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 有人能帮我处理下面的代码吗?我想要一个使用函数的等价物。 只是一个音符我试过这个,但它不工作 不起作用的是-当值存在并且返回可选值时。empty()我希望原始函数返回null。它现在正在返回“随机”。 我的假设是,由于方法返回,它被替换。 请注意,原始代码是由其他人编写的。由于它有很多依赖关系,我无法更改输入/输出参数。:(

  • 我已经为我的浏览器游戏创建了一个AndroidWebView应用程序。我使用Javascript警报询问用户是否真的想要重置分数。但是我想使用Android警报而不是Javascript警报。所以我创建了一个Javascript接口。 现在我需要Javascript中Android警报的返回值。问题是Android警报有一个ClickListener。但是如何获取值并将其返回到Javascript

  • 问题内容: 是否有可能为集合中未找到的所有键返回默认值? 问题答案: [更新] 正如其他答案和评论者所指出的那样,从Java 8开始,您可以简单地调用。 [原版的] 没有Map实现可以完全做到这一点,但是通过扩展HashMap来实现自己的实现很简单:

  • 我有三个java8 Optionals,并希望以首选顺序返回实际存在的任何一个。似乎应该有一种简单的方法可以像这样链接它们: 如果这三个都为空,那么应该返回一个。 现有的orElse和orElseGet不能真正胜任这项任务-它们必须返回一个实际值,因此剩余的回退不可能是Optionals本身。 在最坏的情况下,我可能会有一长串ifPresent()检查,但似乎有更好的方法来处理它?