Optional.flatMap()和Stream.flatMap()有什么区别。在Stream上更正flatMap: List<ObjectDTO> collect = types.stream() .flatMap(a -> client.getSthById(new URI(a)).stream()) .collect(Collectors.toList());在Optional上使用flatMap时发生异常: List<ObjectDTO> collect2 = client.getSthByObj(obje.get(), null).getBrowse() .flatMap(uri -> client.getSthById(uri).stream()) .collect(Collectors.toList());为什么不能以相同的方式使用它?
3 回答
![?](http://img1.sycdn.imooc.com/54584f240001db0a02200220-100-100.jpg)
侃侃尔雅
TA贡献1801条经验 获得超16个赞
Optional和Stream是两种用于分离目的的不同野兽。
可选的是包装器,其中保存的结果可以是“存在”或“不存在”(空),并提供了处理这两个条件(存在或不存在)的方法。“ flatMap()”操作是应用于可选包装中保存的值的操作。该操作必须返回Optional作为结果:
Optional<String> s = Optional.of("test input");
s.flatMap( input -> Optional.of(input));
在这里阅读更多信息Optional.flatMap();
Stream的flatmap()可帮助您获取和处理列表元素的嵌套元素。有关Stream的flatmap()的更多说明和解释,请参见此处。
![?](http://img1.sycdn.imooc.com/54585050000156a302200220-100-100.jpg)
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
从javadoc:Optional.flatMap:
flatMap(Function<? super T,Optional<U>> mapper)
如果存在一个值,则对它应用所提供的带有可选参数的映射函数,返回该结果,否则返回一个空的Optional。
Stream.flatMap:
flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
返回一个流,该流包括将流中的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容而得到的结果。
所以主要的区别是,一个返回一个Stream,另一个返回Optional
添加回答
举报
0/150
提交
取消