Java map() 与 flatMap()的比较

  1. 1. 在Optionals当中
  2. 2. 在Streams当中
  3. Reference

map()flatMap()方法都来自于functional languages. 在Java8当中,我们可以在Optional, Stream还有CompletableFuture当中找到他们。

Stream代表一些列的对象,而Optional代表一个存在或者空的值。map()flatmap()都是聚合方法,尽管其有着相同的返回类型,但是实际上他们有很多的不同。下面我们通过例子来逐一展现。

1. 在Optionals当中

// map()
Optional<String> s = Optional.of("Test");
assertEquals(Optional.of("TEST"), s.map(String::toUpperCase));

// 如果情况更为复杂,变成Optional<Optional<String>>
assertEquals(Optional.of(Optional.of("STRING")), 
    Optional.of("string").map(s -> Optional.of("STRING")));

// 同样的代码用flatmap来表示
assertEquals(Optional.of("STRING"), 
Optional.of("string").flatMap(s -> Optional.of("STRING")));

2. 在Streams当中

map方法只能做一层的序列化,但是flatmap可以做多层的,来解决Stream<Stream>的这种结构的问题。

// 对于这种多层架构的, map()方法就显得力有未逮了
List<List<String>> list = Arrays.asList(
  Arrays.asList("a"),
  Arrays.asList("b"));
System.out.println(list);

// flatmap可以很好的解决
System.out.println(list
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList()));

Reference

  1. https://www.baeldung.com/java-difference-map-and-flatmap
  2. https://www.mkyong.com/java8/java-8-flatmap-example/

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:Java map() 与 flatMap()的比较

文章字数:314

本文作者:Leilei Chen

发布时间:2020-02-05, 18:59:48

最后更新:2020-02-05, 19:00:06

原始链接:https://www.llchen60.com/Java-map-%E4%B8%8E-flatMap-%E7%9A%84%E6%AF%94%E8%BE%83/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏