Java-потоки (или любая другая функциональная библиотека для других языков) очень хороши.
Например, вы можете иметь (js sudo code
).
Stream.of([1, 2, 3]).filter(x => x > 2).map(x => x * 5).result(); // [15]
Игнорировать синтаксис иликонкретная реализация - это просто пример.
Теперь у меня проблемы, когда поток немного усложняется.
Например, если мне нужны разные данные на каждом шаге, например:
Stream.of([1,2, 3])
.map(x => x * 3)
.zip([4, 5, 6])
.map(..//here i need the initial array)
.map(..//here i need the zipped array)
.total(..//
Как вы видите, в некоторых методах мне нужно последнее вычисленное значение, в некоторых мне нужно начальное значение.
Кроме того, существуют ситуации, когда мне нужны промежуточные значения, но после их вычисления.
map(x => x * 1).map(x => x * 2).map(x => x * 4).map(..//i need the result from 2nd map (x*2)
Это глупый пример, но иллюстрирующий проблему.
Есть ли хорошее решение этой проблемы.
Я думал, что могу сохранить все данные в объектено это приводит к более подробному коду, потому что на каждом шаге я должен устанавливать и получать свойства объекта.
Другой пример: Суммируйте числа: [1, 2, 3, 4] -> 10
Фильтруйте числа выше 2: [1, 2, 3, 4] -> [3, 4]
Умножьте каждое числос тСумма: [30, 40]
Stream.of([1,2,3, 4])
.sum()
.filter(// here will be the sum, but i want the initial array and later the sum)
.map(// here i want the filtered array and the calculated sum)
Спасибо