Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 8如何仅从SummaryStatistics返回sum和count值_Java_Functional Programming_Java 8 - Fatal编程技术网

java 8如何仅从SummaryStatistics返回sum和count值

java 8如何仅从SummaryStatistics返回sum和count值,java,functional-programming,java-8,Java,Functional Programming,Java 8,我们都知道,SummaryStatistics包含count、sum、min、average和max值。 如果只返回count和sum值是否可能更有效?如果是,如何实现 您可以编辑以下代码以向我显示: Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f). filter(i -> i > 0.5).mapToInt(i -> (int) (i * 100 - 50)).summaryStatistics() 谢谢如果我理解正

我们都知道,SummaryStatistics包含count、sum、min、average和max值。 如果只返回count和sum值是否可能更有效?如果是,如何实现

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

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
时没有清除
size
标志的操作,则可以完全跳过某些操作。例如:

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
,不会进行相同的优化。在你的例子中,情况并非如此,但要知道这是一件好事


既然你说你用了
count
sum
两种方法,我还是会选择
IntSummaryStatistics
迭代两次。在
IntSummaryStatistics
中执行的另外两个操作是
Math.min
Math.max

什么是
SummaryStatistics
…请解释一下…我们是在谈论类似于这里的东西吗?@nullpointer是的,它是IntSummaryStatistics或任何其他类型,如DoubleSummaryStatistics。summaryStatistics是一个方法名。您只希望访问sum和count,那么为什么getSum和getCount对您没有用处呢?很抱歉,这个问题不清楚如果我只返回count和sum值,您所说的更高效是什么意思?使用
双流
而不是以流框
浮点
s作为起点,将比不计算
min
max
产生更大的影响(平均值仅在您要求时计算).实际上,我的意思是,如果有一种方法可以只获取总和和计数值,因为我不需要IntSummaryStatistics中的其他值。我想知道有没有一种比使用IntSummaryStatistics更有效的方法,可能是自定义收集器或reduce方法,我不知道如何获取它。无论如何,谢谢你的解释,这很好。@RickGeng你可能是寻找一个不存在的性能问题。是的,编写一个自定义收集器是可能的(一点也不难),但是没有必要,你几乎不会感觉到有什么不同