gpt4 book ai didi

java 8 如何仅从 SummaryStatistics 返回总和和计数值

转载 作者:行者123 更新时间:2023-11-30 06:30:50 25 4
gpt4 key购买 nike

众所周知,SummaryStatistics包含计数、总和、最小值、平均值、最大值。如果我只返回计数和求和值,是否可能更有效?如果是,如何实现?

您可以编辑以下代码来向我展示:

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f).
filter(i -> i > 0.5).mapToInt(i -> (int) (i * 100 - 50)).summaryStatistics()

谢谢

最佳答案

如果我理解正确,您是在问是否应该遍历源两次或一次并使用 IntSummaryStatistics。这样会更便宜吗:

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f)
.filter(i -> i > 0.5)
.mapToInt(i -> (int) (i * 100 - 50))
.count();

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f)
.filter(i -> i > 0.5)
.mapToInt(i -> (int) (i * 100 - 50))
.sum();

对比:

  IntSummaryStatistics summaryStatistics = Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f)
.filter(i -> i > 0.5)
.mapToInt(i -> (int) (i * 100 - 50))
.summaryStatistics();

summaryStatistics.getSum();
summaryStatistics.getCount();

如果不进行测量,很难说,但请注意,在使用 count 的情况下,如果没有清除 SIZED 标志的操作,则可能会完全跳过某些操作。例如:

long result = Stream.of(1, 2, 3, 4, 5)
.mapToInt(x -> {
System.out.println("mapping");
return x;
})
.count();

System.out.println(result);

这里根本不需要处理mapToInt - 事实上在java-9中这将被跳过。 IntSummaryStatistics 没有进行相同的优化,其中始终计算计数。您的示例中并非如此,但了解一下是一件好事。

既然你说你以任何一种方式使用countsum,我仍然会选择IntSummaryStatistics而不是迭代两次。在 IntSummaryStatistics 中完成的唯一两个其他操作是 Math.minMath.max

关于java 8 如何仅从 SummaryStatistics 返回总和和计数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46166793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com