我一直在阅读 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));
但是我看不出它比带 reduce 的 mapToInt 有什么优势。
System.out.println(Arrays.stream(strarr).mapToInt(s -> s.length()).reduce(0, (s1, s2) -> s1 + s2));
两者都给出了 12 的正确答案,并且两者似乎并行工作良好。
一个比另一个好吗?如果是,为什么?
最佳答案
Is one better than the other, and if so, why?
对于第一种reduce
方法,存在隐蔽的装箱 成本。
mapToInt.reduce(...)
方法避免了这种情况。
所以,我们的想法是,如果您对求和感兴趣,则 average 等只需使用原始流特化,因为它们效率更高。
对了,代码:
Arrays.stream(strarr).mapToInt(s -> s.length()).reduce(0, (s1, s2) -> s1 + s2)
可以简化为:
Arrays.stream(strarr).mapToInt(s -> s.length()).sum();
关于Java mapToInt 与 Reduce with map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893900/