gpt4 book ai didi

java - 如何使用Optional.ofNullable和Stream

转载 作者:行者123 更新时间:2023-12-02 01:07:11 25 4
gpt4 key购买 nike

我正在做一个测试用例来一起使用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());

我的问题是,为什么在第一个示例中我使用 flatMapma​​p 而在第二个示例中我使用两个 ma​​p做同样的工作。如果我尝试在第一个示例中使用两个 map ,它将不起作用。

最佳答案

要了解发生的情况,查看所有返回类型可以帮助您:

第一个示例:

List<String> list1 = List.of("abc","abc");

List<String> result =
Optional.ofNullable(list1) // Optional<List<String>>
.stream() // Stream<List<String>>
.flatMap(List::stream) // Stream<String>
.map(e -> e.concat("def")) // Stream<String>
.collect(Collectors.toList()); // List<String>

在此示例中,您直接从 Optional<List<String>> 进入到 Stream<List<String>>然后使用后一个接口(interface)的方法。这里使用的方法是(按顺序):

  1. Optional#ofNullable(T)
  2. Optional#stream()
  3. Stream#flatMap(Function)
  4. Stream#map(Function)
  5. Stream#collect(Collector)

第二个示例:

List<String> list2 = List.of("abc","abc");

List<String> result =
Optional.ofNullable(list2) // Optional<List<String>>
.map(List::stream) // Optional<Stream<String>>
.orElseGet(Stream::empty); // Stream<String>
.map(e-> e.concat("def")) // Stream<String>
.collect(Collectors.toList()); // List<String>

在此示例中,您从 Optional<List<String>> 开始到Optional<Stream<String>> (另一个可选)然后提取 Stream<String>通过Optional#orElseGet(Supplier) 。然后,您使用 Stream 的方法界面。这里使用的方法是(按顺序):

  1. Optional#ofNullable(T)
  2. Optional#map(Function)
  3. Optional#orElseGet(Supplier)
  4. Stream#map(Function)
  5. Stream#collect(Collector)

关于java - 如何使用Optional.ofNullable和Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59867776/

25 4 0