Optional.flatMap 和 Optional.map 有什么区别?

新手上路,请多包涵

这两种方法有什么区别: Optional.flatMap()Optional.map()

一个例子将不胜感激。

原文由 codependent 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 736
2 个回答

使用 map 如果函数返回您需要的对象或 flatMap 如果函数返回 Optional 。例如:

 public static void main(String[] args) {
  Optional<String> s = Optional.of("input");
  System.out.println(s.map(Test::getOutput));
  System.out.println(s.flatMap(Test::getOutputOpt));
}

static String getOutput(String input) {
  return input == null ? null : "output for " + input;
}

static Optional<String> getOutputOpt(String input) {
  return input == null ? Optional.empty() : Optional.of("output for " + input);
}

两个打印语句都打印相同的内容。

原文由 assylias 发布,翻译遵循 CC BY-SA 4.0 许可协议

他们都从可选的类型中获取一个函数。

map() 将功能“ 按原样”应用到您拥有的选项上:

 if (optional.isEmpty()) return Optional.empty();
else return Optional.of(f(optional.get()));

如果您的函数是来自 T -> Optional<U> 的函数,会发生什么情况?

您的结果现在是 Optional<Optional<U>>

That’s what flatMap() is about: if your function already returns an Optional , flatMap() is a bit smarter and doesn’t double wrap it, returning Optional<U>

它是两个功能习语的组合: mapflatten

原文由 Diego Martinoia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题