iteratorや拡張forよりStreamのforEachが速い?
きしださんが書いたコードの一カ所が謎だったので・・・
謎だったコードは
Streamを使ってみる。
static Integer stream(){
int[] c = {0};
array.stream().forEach(i -> c[0] += i);
return c[0];
}
5715msで、かなり速い。
これと
static Integer reduce(){
return array.stream().collect(Collectors.summingInt(i -> i));
}
40280msと、想像以上に遅い。
手元で試してもreduceが遅いのは確かなんだけど・・・
これだとIntとIntegerの型変換のロスが結構あるんじゃ無いかなぁ〜って
外した版を作ってみた
そして計測してみた
forEach(704982704):9741ms
ite(704982704):9559ms
index(704982704):9595ms
stream(704982704):4139ms
intreduce(704982704):4131ms
paraintreduce(704982704):1979ms
reduce(704982704):34121ms
para(704982704):12383ms
reduce2(704982704):27314ms
それでも単純なforEachに比べても3倍弱か・・・何処にそんな余計なコストがかかってるんだろう