【发布时间】:2020-01-22 20:29:03
【问题描述】:
我正在做一个测试用例,将 Optional.ofNullable 和 Stream 一起使用,我面临着同样的方法,两者都有相同的输出。
List<String> list1 = List.of("abc","abc");
Optional.ofNullable(list1).stream().flatMap(List::stream).map(e -> e.concat("def")).collect(Collectors.toList());
List<String> list2 = List.of("abc","abc");
Stream<String> stream = Optional.ofNullable(list2).map(List::stream).orElseGet(Stream::empty);
stream.map(e-> e.concat("def")).collect(Collectors.toList());
我的问题是,为什么在第一个示例中我使用 flatMap 和 map 而在第二个示例中我使用两个 map's做同样的工作。如果我在第一个示例中尝试使用两个地图,则它不起作用。
【问题讨论】:
-
如果您将
flatMap替换为map,那么您最终会得到Stream<Stream<String>>,而不是Stream<String>。 -
我理解这一点,如果我将第一个替换为地图,它将返回一个 Stream
> ,但是为什么在第二个示例中,当我使用变量流接收时它,它返回一个 Stream ? -
我阅读了文档,但仍然不清楚,为什么它会这样工作。
标签: java java-stream optional