Java map() 与 flatMap()的比较
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
- https://www.baeldung.com/java-difference-map-and-flatmap
- https://www.mkyong.com/java8/java-8-flatmap-example/
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com
文章标题:Java map() 与 flatMap()的比较
文章字数:314
本文作者:Leilei Chen
发布时间:2020-02-06, 10:59:48
最后更新:2020-02-06, 11:00:06
原始链接:https://www.llchen60.com/Java-map-%E4%B8%8E-flatMap-%E7%9A%84%E6%AF%94%E8%BE%83/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。