Nelle librerie pre-Java 8 pesanti di lambda come Guava, gli output utilizzano interfacce Java Collection Framework comuni, quindi è facile passarle alle API esterne / interne e sfruttare comunque un calcolo pigro se il metodo della libreria lo fa (ad esempio pigro filter()e transform()).
Tuttavia, in Java 8 Streams, la chiamata per ottenere un Collection/ Mapè terminale (cioè desideroso) e alloca anche nuove strutture di dati per contenere i risultati.
Per calcoli complicati con più fasi e modello di strategia nel mezzo, ciò causa molte allocazioni non necessarie a causa dei risultati intermedi.
Quindi, la gente pensa che sia una buona pratica per le API interne (cioè le strategie del modello di strategia) prendere e restituire Streamo dovrei semplicemente ricadere sulle API Guava Guazy pigre ma non ottimizzate (gioco di parole inteso)?
Modificare:
La mia principale preoccupazione Streamè che può essere consumato solo una volta e passare qualcosa di simile a un Supplier<Stream<X>>aspetto estremamente ingombrante. Ti spinge quasi solo a passare un Collectione poi ri- stream()esso (e pagando il costo della valutazione desiderosa a quel punto).