java stream optional_将Java 8的Optional与Stream :: flatMap一起使用

小编典典

Java 9

Optional.stream 已添加到JDK9。这使你无需任何帮助程序方法即可执行以下操作:

Optional result =

things.stream()

.map(this::resolve)

.flatMap(Optional::stream)

.findFirst();

Java 8

是的,这是API中的一个小漏洞,因为将Optional转换为长度为零或一的Stream有点不方便。你可以这样做:

Optional result =

things.stream()

.map(this::resolve)

.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())

.findFirst();

但是,在flatMap中使用三元运算符比较麻烦,因此最好编写一些辅助函数来完成此操作:

/**

* Turns an Optional into a Stream of length zero or one depending upon

* whether a value is present.

*/

static Stream streamopt(Optional opt) {

if (opt.isPresent())

return Stream.of(opt.get());

else

return Stream.empty();

}

Optional result =

things.stream()

.flatMap(t -> streamopt(resolve(t)))

.findFirst();

在这里,我内联了对resolve()的调用,而不是进行单独的map()操作,但这只是一个问题。

2020-03-13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值