栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java8 stream.reduce()具有3个参数-获得透明度

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8 stream.reduce()具有3个参数-获得透明度

组合器不会减少0和1的列表。当流不是并行运行时,在这种情况下不使用它,因此以下循环是等效的:

U result = identity;for (T element : this stream)    result = accumulator.apply(result, element)return result;

当您并行运行流时,任务将分为多个线程。因此,例如,管道中的数据被划分为多个块,这些块分别评估并产生结果。然后使用合并器合并此结果。

因此,您将不会看到一个减少的列表,而是2个值,它们是标识值或一个任务计算出的另一个值的总和。例如,如果您在合并器中添加打印语句

(i1, i2) -> {System.out.println("Merging: "+i1+"-"+i2); return i1+i2;});

您可能会看到以下内容:

Merging: 0-0Merging: 0-0Merging: 1-0Merging: 1-0Merging: 1-1

这将有助于调试更复杂的情况,我相信我会最终遇到的。

更一般而言,如果您想随时随地查看管道上的数据,则可以使用

peek
(或者调试器也可以提供帮助)。因此适用于您的示例:

long countOfAWords = result.stream().map(s -> s.charAt(0) == 'A' ? 1 : 0).peek(System.out::print).mapToLong(l -> l).sum();

可以输出:

100100

[免责声明:我意识到这可能不是编写此代码的最佳方法;这只是为了练习!]。

完成任务的惯用方式

filter
是流式传输,然后简单地使用
count

long countOfAWords = result.stream().filter(s -> s.charAt(0) == 'A').count();

希望能帮助到你!:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号