Em bibliotecas pré-Java 8 pesadas para lambda como Guava, as saídas usam interfaces comuns do Java Collection Framework, portanto é fácil transmiti-las para APIs externas / internas e ainda aproveitar uma computação lenta se o método da biblioteca o fizer (por exemplo, lazy filter()e transform()).
No entanto, em Java 8 Streams, a chamada para obter um Collection/ Mapé terminal (ou seja ansioso) e que também irá alocar novas estruturas de dados para armazenar os resultados.
Para cálculos complicados com vários estágios e padrão de estratégia no meio, isso causa muitas alocações desnecessárias devido aos resultados intermediários.
Então, as pessoas pensam que é uma boa prática para APIs internas (ou seja, estratégias de padrão de estratégia) obter e retornar Streams ou devo apenas recorrer às APIs Guava preguiçosas, mas não simplificadas (trocadilhos, acho?)?
Editar:
Minha principal preocupação Streamé que ele só pode ser consumido uma vez e passar algo como um Supplier<Stream<X>>parece extremamente complicado. Quase o empurra apenas para passar em um Collectione depois devolvê- stream()lo (e pagando o custo de uma avaliação ágil naquele momento).