javaのStream#map()とjsのArray#map()は実行順が違う
java8から追加されたmap
他の言語にも似た機能はありますが実行順が違うので備忘録的なメモ
javaのmap
Stream.of(1, 2, 3, 4, 5) .map(v -> { System.out.printf("%dに1を加える\n", v); return v + 1; }) .map(v -> { System.out.printf("%dを2倍する\n", v); return v * 2; }).forEach(v -> System.out.println(v));
jsのmap
[1, 2, 3, 4, 5] .map(v => { console.log(`${v}に1を加える`); return v + 1; }) .map(v => { console.log(`${v}を2倍する`); return v * 2; }) .forEach(v => console.log(v));
パっと見、まったく同じに見えますが実行してみると結果が違います
javaの実行結果
1に1を加える 2を2倍する 4 2に1を加える 3を2倍する 6 3に1を加える 4を2倍する 8 4に1を加える 5を2倍する 10 5に1を加える 6を2倍する 12
jsの実行結果
1に1を加える 2に1を加える 3に1を加える 4に1を加える 5に1を加える 2を2倍する 3を2倍する 4を2倍する 5を2倍する 6を2倍する 4 6 8 10 12
結果的に生成されるリストは同じですが実行順が違います
気をつけないと間違えそうですね