flatMap是否保证是懒惰的?

flatMap是否保证是懒惰的?,第1张

flatMap是否保证是懒惰的?

在当前的实现下

flatmap
渴望;像任何其他有状态中间 *** 作(如
sorted
distinct
)一样。而且很容易证明:

 int result = Stream.of(1) .flatMap(x -> Stream.generate(() -> ThreadLocalRandom.current().nextInt())) .findFirst() .get();    System.out.println(result);

从来没有像

flatMap
渴望的那样完成。例如:

urls.stream()    .flatMap(url -> fetchDataFromInternet(url).stream())    .filter(...)    .findFirst()    .get();

这意味着,对于每个

url
flatMap
即使您只关心单个 *** 作,也将阻止其后的所有其他 *** 作。因此,让我们假设,从
url
您的
fetchDataFromInternet(url)
生成
10_000
行中,即使您只关心一行,您
findFirst
也将不得不等待
所有 10_000的计算。

编辑

这在Java 10中已得到修复,在Java
10中我们恢复了懒惰:请参阅JDK-8075939

编辑2

这也已在Java
8(8u222)中修复:JDK-8225328



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5428278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存