java maptolong_java-Collectors.summingLong或mapToLong汇总长值
我有一个带有值的对象列表,并希望总结所有这些值.在Java 8中执行此操作的首选方法是什么?public static void main(String[] args) {List longs = new ArrayList();longs.add(new AnObject());longs.add(new AnObject());longs.add(new AnObject());long ma
我有一个带有值的对象列表,并希望总结所有这些值.在Java 8中执行此操作的首选方法是什么?
public static void main(String[] args) {
List longs = new ArrayList();
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更直截了当,但我无法真正说明原因.
编辑:我已经通过将summaryLong更改为summingLong来更新了问题,这就是为什么一些答案和评论可能看起来有些偏离的原因.
解决方法:
我认为使用Collectors.summarizingLong(AnObject :: getVal)会做比您需要做的更多的工作,因为它会计算除总和(平均值,计数,最小值,最大值,…)以外的其他统计信息.
如果只需要总和,请使用更简单,更有效的方法:
long mappedSum = longs.stream().mapToLong(AnObject::getVal).sum();
将Collectors.summarizingLong更改为Collectors.summingLong后,很难说哪种选择会更有效.第一个选项有一个额外的步骤(mapToLong),但我不确定会有什么区别,因为与第一个选项总和相比,第二个选项在收集方面的工作更多.
标签:java-8,java
来源: https://codeday.me/bug/20191028/1954458.html
更多推荐
所有评论(0)