Supponendo che disponga di un Java IntStream, è possibile convertirlo in un IntStream con somme cumulative? Ad esempio, uno stream che inizia con [4, 2, 6, ...] deve essere convertito in [4, 6, 12, ...].Calcolo stato stream: somme cumulative
Più in generale, come si dovrebbe procedere all'implementazione di operazioni di flusso stateful? Ci si sente come questo dovrebbe essere possibile:
Con l'ovvia limitazione che questo funziona solo sui flussi sequenziali. Tuttavia, Stream.map richiede esplicitamente una funzione mappa senza stato. Ho ragione nel mancare un'operazione Stream.statefulMap o Stream.cumulative o manca il punto degli stream Java?
Confronta ad esempio per Haskell, dove la funzione scanl1 risolve esattamente questo esempio:
scanl1 (+) [1 2 3 4] = [1 3 6 10]
Gli stream sono progettati appositamente per supportare solo operazioni parallelizzabili, il che non è il caso di scanl. –
Gli stream hanno più senso se si pretende di essere in 'java.util.concurrent.stream' invece di' java.util.stream'. –
Nota che se la tua sorgente è una matrice, puoi semplicemente usare ['Arrays.parallelPrefix (array, Integer :: sum);'] (http://docs.oracle.com/javase/8/docs/api/java /util/Arrays.html#parallelPrefix-int:A-java.util.function.IntBinaryOperator-) ... – Holger