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

2022-08-31 05:55:09

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

如能提供一个例子,将不胜感激。


答案 1

如果函数返回您需要的对象或函数返回 .例如:mapflatMapOptional

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);
}

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


答案 2

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

map()在可选功能上应用“按原样”功能:

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

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

这就是意义所在:如果你的函数已经返回一个,则更聪明一些,并且不会对其进行双重包装,则返回。flatMap()OptionalflatMap()Optional<U>

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


推荐