Zakładając, że mam aplikację Java IntStream, czy można ją przekonwertować na IntStream z łącznymi sumami? Na przykład strumień rozpoczynający się od [4, 2, 6, ...] powinien zostać przekonwertowany na [4, 6, 12, ...].Strumień obliczeń statycznych: suma skumulowana
Bardziej ogólnie, w jaki sposób należy postępować w przypadku realizacji operacji z użyciem strumienia stanowego? To powinno być możliwe:
Z oczywistym ograniczeniem, że działa to tylko na sekwencyjnych strumieniach. Jednak Stream.map wyraźnie wymaga funkcji mapowania bezstanowego. Czy mam rację, jeśli brakuje operacji Stream.statefulMap lub Stream.cumulative, czy brakuje punktu strumieni Java?
Porównaj na przykład do Haskell, gdzie funkcja scanl1 rozwiązuje dokładnie ten przykład:
scanl1 (+) [1 2 3 4] = [1 3 6 10]
Strumienie są dość celowo zaprojektowane, aby obsługiwać tylko operacje równoległe, co nie jest tak naprawdę w przypadku skanowania. –
Strumienie mają więcej sensu, jeśli udajesz, że są w 'java.util.concurrent.stream' zamiast' java.util.stream'. –
Zauważ, że jeśli twoje źródło jest tablicą, możesz po prostu użyć ['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