我有一个包含数值的对象列表,想要汇总所有这些值。在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,因此一些答案和评论可能会有点不准确。
mapToLong
版本更清晰。另外,如果你只关心总和,可以使用Collectors.summingLong(...)
代替summarizingLong(...)
。 - Misha