How can I perform operations in javascript just like we do pipeline of operations in java streams?

  • A+
Category:Languages

In java 8 using streams when I chain methods one after the another the execution of operations are performed in pipelined manner.Example:-

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)); 

Output:-

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 

But when I tried similarly in javascript.The result is different.As in javascript first operation gets completed and then second operation is performed.Example:-

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)); 

Output:-

 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 

Is there any way in javascript that it performs operations in pipeline manner and I get output as Java program?

This question ask only how to collect like in javascript but not how internal working changes for same type of methods

 


Maybe later (or never) you can use the actual experimental pipeline operator |>, which has the following syntax:

expression |> function 

Your wanted result could be achieved by taking the functions as separate functions and iterate the stream array for each pipe.

This works only in FF. From version 58: this feature is behind the --enable-pipeline-operator compile flag.

const     a = x => { x = x * x; console.log("map1=" + x); return x; },     b = x => { x = x * 3; console.log("map2=" + x); return x; },     c = x => console.log("forEach=" + x)  var nums = [1, 2, 3, 4, 5, 6];  nums.forEach(v => v |> a |> b |> c);

The same with a pipe as function (function composition enabling piping) with a closure over the wanted functions.

const     pipe = (...functions) => input => functions.reduce((acc, fn) => fn(acc), input),     a = x => { x = x * x; console.log("map1=" + x); return x; },     b = x => { x = x * 3; console.log("map2=" + x); return x; },     c = x => console.log("forEach=" + x)  var nums = [1, 2, 3, 4, 5, 6],     pipeline = pipe(a, b, c);  nums.forEach(pipeline);

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: