GuavaなどのJava 8より前のラムダヘビーライブラリでは、出力は共通のJava Collection Frameworkインターフェイスを使用するため、外部/内部APIに簡単に渡すことができ、ライブラリメソッドがそれを実行する場合(レイジーfilter()
およびtransform()
)でも遅延計算を利用できます。
ただし、Java 8 Streamsでは、Collection
/ を取得する呼び出しMap
はターミナル(つまり、熱心)であり、結果を保持するために新しいデータ構造も割り当てます。
中間に複数のステージと戦略パターンがある複雑な計算では、中間結果のために多くの不必要な割り当てが発生します。
だから、人々は内部API(すなわち戦略パターン戦略)がStream
s を取得して返すのが良い習慣だと思うのですか、それとも単に怠け者にフォールバックする必要がありますか?
編集:
私の主な関心事Stream
は、それが一度だけ消費され、Supplier<Stream<X>>
非常に面倒に見えるようなものを渡すことができるということです。それはほとんどあなただけ渡すためにプッシュしCollection
、その後、再stream()
それを(その時点での先行評価のコストを支払います)。