在像Guava这样的Java 8之前的lambda繁重库中,输出使用通用的Java Collection Framework接口,因此很容易将它们传递给外部/内部API,并且如果库方法做到了,则仍然可以利用一些惰性计算(例如lazy filter()
和transform()
)。
但是,在Java 8 Streams中,获取Collection
/ 的调用Map
是终端(即渴望),并且还将分配新的数据结构来保存结果。
对于中间具有多个阶段和策略模式的复杂计算,由于中间结果,这会导致很多不必要的分配。
因此,人们是否认为采用内部API(即策略模式策略)并返回Stream
s 是一个好习惯,还是我应该退后到懒惰的Guava API而不精简(我想是双关语)?
编辑:
我主要关心的Stream
是它只能被消费一次并传递Supplier<Stream<X>>
看起来非常笨拙的东西。它几乎迫使您只通过a Collection
然后重新stream()
通过(并为此付出了急切的评估费用)。
什么,番石榴和朋友没有更新以利用本地流?
—
Kilian Foth,2015年
具有接收和返回流的接口确实可以提高与标准流功能的互操作性。它允许您将对接口的调用集成到流管道中。
—
菲利普
@KilianFoth近一年来没有发布任何Guava版本,有很多关于用Stream替换Guava的lambda东西的热门文章。但是,它们都没有解决Guava收集操作可能渴望或懒惰的事实。
—
billc.cn 2015年