【Java必修课】Java 8中map()与flatMap()在Optional和Stream中的区别

本文探讨了Java 8中Optional和Stream中map()与flatMap()的区别。在Optional中,map()可能导致Optional对象的嵌套,而flatMap()能避免这种嵌套。在Stream中,map()会包裹一层Stream,而flatMap()则能将嵌套的Stream展开成单一Stream。理解这两个方法对于高效使用Java 8的函数式编程至关重要。
摘要由CSDN通过智能技术生成

在Java 8中,我们可以在Optional和Stream经常看到map()和flatMap()这两个方法,这两个方法是针对函数式特性引入的,两者功能上看似相近,但其实还是有很大区别的。让我们来了解一下吧。

Optional中的比较

 

我们会经常在Optional中使用到map()做对象转化,如下把一个整数转化成它的两倍:

Optional<Integer> num = Optional.of(33);
assertEquals(Optional.of(66),
        num.map(i -> i * 2));

然而,在一些更复杂的函数里,可能会返回一个Optional的结果,而不是我们直接需要可用的,就会造成了嵌套结构。看下面的代码来理解一下这种情况:

assertEquals(Optional.of(Optional.of(66)),
        Optional.of(33).map(i -> Optional.of(i * 2)));

结果使用map()就返回了一个Optional<Optional<Integer>>嵌套结构的结果。这时候,使用flatMap()能带来不一样的效果:

assertEquals(Optional.of(66),
        Optional.of(33).flatMap(i -> Optional.of(i * 2)));

Stream中的比较

这两个方法在Stream中的表现其实也是类似的。</

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值