Nelle librerie lambda-pesanti pre-Java 8 come Guava, le uscite utilizzano interfacce comuni di Java Collection Framework, quindi è facile passarle a API esterne / interne e sfruttare ancora un calcolo pigro se il metodo della libreria lo esegue (ad esempio, pigro filter() e transform() ).
Tuttavia, in Java 8 Stream, la chiamata per ottenere un Collection / Map è terminale (cioè desiderosa) e assegnerà anche nuove strutture dati per contenere i risultati.
Per calcoli complicati con più stadi e pattern di strategia nel mezzo, questo causa molte allocazioni non necessarie a causa dei risultati intermedi.
Quindi, le persone pensano che sia una buona pratica per le API interne (ad esempio strategie di strategia) prendere e restituire Stream s o dovrei semplicemente ricorrere alle API guava pigre ma non ottimizzate (gioco di parole immagino)?
Modifica:
La mia preoccupazione principale con Stream è che può essere consumata solo una volta e il passaggio di qualcosa come Supplier<Stream<X>> sembra estremamente complicato. Ti spinge quasi a passare solo un Collection e poi re stream() (e pagando il costo di una valutazione entusiasta a quel punto).