Java mapToInt 与 Reduce with map

标签 java java-8 mapreduce reduce

我一直在阅读 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/

相关文章:

hadoop - 为什么我们需要 Hadoop 无密码 ssh?

java - Java EE 应用程序中的样式路径

java - 解析日期时无法从 TemporalAccessor 获取 ZonedDateTime

java - 如何创建或增强使用 mapstruct 的自定义注释

hadoop - 如何比较 Hive 的 MR 工作表现?

hadoop -/etc/bin/hadoop 是同步调用吗?

java - 如何根据 Collection 值的大小对 Map 进行排序?

java - 如何从给定的字符串中获取字符数组(A-z,无数字)?

java - 基于时间对对象进行排序并避免显式 NULL 检查

java - 使用 SunEC 提供商的generateKeyPair 时出现运行时异常