Java mapToInt与带有地图的Reduce

Way*_*eio 5 java reduce mapreduce java-8

我一直在阅读reduce,并且发现有3个参数版本,基本上可以执行map reduce,如下所示:

String[] strarr = {"abc", "defg", "vwxyz"};

System.out.println(Arrays.stream(strarr).reduce(0, (l, s) -> l + s.length(), (s1, s2) -> s1 + s2));
Run Code Online (Sandbox Code Playgroud)

但是,我看不出带有reduce的mapToInt的优势。

System.out.println(Arrays.stream(strarr).mapToInt(s -> s.length()).reduce(0, (s1, s2) -> s1 + s2));
Run Code Online (Sandbox Code Playgroud)

两者都给出正确的答案12,并且似乎并行工作良好。

一个比另一个好吗?如果是,为什么?

Ous*_* D. 6

一个比另一个好吗?如果是,为什么?

采用第一种reduce方法时,会有很高的拳击成本。

mapToInt.reduce(...)方法避免了这种情况。

因此,这个想法是,如果您对求和感兴趣,average等人会使用原始流特化,因为它们的效率更高。

顺便说一句,代码:

Arrays.stream(strarr).mapToInt(s -> s.length()).reduce(0, (s1, s2) -> s1 + s2)
Run Code Online (Sandbox Code Playgroud)

可以简化为:

Arrays.stream(strarr).mapToInt(s -> s.length()).sum();
Run Code Online (Sandbox Code Playgroud)