【发布时间】:2016-02-28 05:24:44
【问题描述】:
我编写这段代码是为了将单词列表减少为有多少单词以“A”开头的长计数。我只是为了学习 Java 8 而编写它,所以我想更好地理解它[免责声明:我意识到这可能不是编写此代码的最佳方式;这只是为了练习!].
Long countOfAWords = results.stream().reduce(
0L,
(a, b) -> b.charAt(0) == 'A' ? a + 1 : a,
Long::sum);
中间参数/lambda(称为累加器)似乎能够在没有最终“Combiner”参数的情况下减少完整列表。事实上,Javadoc 实际上是这样说的:
{@code accumulator} 函数充当一个融合映射器和 累加器, * 有时比单独的映射和归约更有效, *例如当知道先前减少的值时,您可以避免 * 一些计算。
[Edit From Author] - 下面的说法是错误的,所以不要让它混淆你;我只是将其保留在这里,以免破坏答案的原始上下文。
无论如何,我可以推断出累加器一定只是输出组合器组合的 1 和 0。不过,我并没有从文档中发现这一点特别明显。
我的问题
有没有办法在组合器执行之前查看输出是什么,以便我可以看到组合器组合的 1 和 0 的列表?这将有助于调试更复杂的情况,我相信我最终会遇到。
【问题讨论】:
-
为什么不简单地
long countOfAWords=results.stream().filter(x->x.charAt(0)=='A').count();? -
我当然可以,但我只是在玩弄新的体验机制;这不是真正的代码 :)
标签: java java-8 reduce java-stream accumulate