【发布时间】:2019-07-01 06:11:18
【问题描述】:
在使用流的 Java 8 中,当我一个接一个地链接方法时,操作的执行是以流水线方式执行的。
例子:
List<Integer> nums = Arrays.asList(1,2,3,4,5,6);
nums.stream().map(x->{
x = x * x;
System.out.println("map1="+x);
return x;
}).map(x->{
x = x * 3;
System.out.println("map2="+x);
return x;
}).forEach(x-> System.out.println("forEach="+x));
输出:-
map1=1
map2=3
forEach=3
map1=4
map2=12
forEach=12
map1=9
map2=27
forEach=27
map1=16
map2=48
forEach=48
map1=25
map2=75
forEach=75
map1=36
map2=108
forEach=108
但是当我在 javascript 中进行类似尝试时,结果不同。在 javascript 中,第一个操作完成,然后执行第二个操作。示例:-
var nums = [1,2,3,4,5,6 ];
nums.map(x => {
x = (x * x);
console.log('map1='+x);
return x;})
.map(x => {
x = x * 3;
console.log('map2='+x);
return x;})
.forEach(x=> console.log('forEach='+x));
输出:-
map1=1
map1=4
map1=9
map1=16
map1=25
map1=36
map2=3
map2=12
map2=27
map2=48
map2=75
map2=108
forEach=3
forEach=12
forEach=27
forEach=48
forEach=75
forEach=108
在 JavaScript 中有什么方法可以让它以流水线的方式执行操作,并且我得到像在 Java 程序中一样的输出?
【问题讨论】:
-
你想要一个来自 JS 的原生解决方案还是寻找一些库/帮助类?
-
查看Lazy.js 遗憾的是我没有在 CDN 上找到它来在这里创建 sn-p
-
@AdityaGupta 这两个问题在概念上是不同的。
-
从概念上讲,您要求的是
stream实现。
标签: javascript java