gpt4 book ai didi

java - Collectors.summingLong 或 mapToLong 汇总长值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:05 32 4
gpt4 key购买 nike

我有一个具有值的对象列表,我想总结所有这些值。在 Java 8 中执行此操作的首选方法是什么?

public static void main(String[] args) {
List<AnObject> longs = new ArrayList<AnObject>();
longs.add(new AnObject());
longs.add(new AnObject());
longs.add(new AnObject());

long mappedSum = longs.stream().mapToLong(AnObject::getVal).sum();
long collectedSum = longs.stream().collect(Collectors.summingLong(AnObject::getVal));

System.out.println(mappedSum);
System.out.println(collectedSum);
}

private static class AnObject {
private long val = 10;

public long getVal() {
return val;
}
}

我认为 mapToLong 更直接,但我无法真正说明原因。

编辑:我通过将 summarizeLong 更改为 summingLong 更新了问题,这就是为什么一些答案和评论可能看起来有点不对劲。

最佳答案

我认为使用 Collectors.summarizingLong(AnObject::getVal)) 会做比您需要做的更多的工作,因为它会计算总和之外的其他统计数据(平均值、计数、最小值、最大值) , ...).

如果你只需要sum,使用更简单高效的方法:

long mappedSum = longs.stream().mapToLong(AnObject::getVal).sum();

Collectors.summarizingLong 更改为 Collectors.summingLong 后,很难说哪个选项更有效。第一个选项有一个额外的步骤 (mapToLong),但我不确定这会有多大的不同,因为第二个选项在 collect 中比什么做更多的工作第一个选项在 sum 中执行。

关于java - Collectors.summingLong 或 mapToLong 汇总长值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278593/

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