在当前的实现下 ,
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)