【发布时间】:2019-03-07 09:26:01
【问题描述】:
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)
谢谢
【问题讨论】:
-
哪个库/语言在这里提供
zip?它肯定不是 JDK 的默认设置。另外,如果需要初始数组,可以选择稍后实现之前的map。 -
Stream.js 但问题就在于此。例如,如果我想映射初始数组,则将结果压缩到另一个数组中,并将结果与初始数组或中间结果进行映射。这可以是数组,例如元素的总和。据我了解,每一步我都会失去以前的价值,所以如果以后想得到它,我可以这样做。谢谢
-
我在底部添加了我想要实现的示例
-
这是 javascript 而不是 java?
-
Javascript - 将标签和标题更改为 javascript
标签: javascript functional-programming