首页 > 解决方案 > 如何在 Java 中使用收集器聚合多个字段

问题描述

我有一个自定义的 Object Itemized,它有两个字段 amount 和 tax。我有一个 Itemized 对象数组,我希望将同一流中的两个字段相加。下面是我如何计算两个字段的总和。

double totalAmount = Arrays.stream(getCharges()).map(Itemized::getAmount).reduce(0.0, Double::sum));
double totalTax = Arrays.stream(getCharges()).map(Itemized::getTax).reduce(0.0, Double::sum));

有什么方法我不必解析两次流并且可以一次将两个字段相加?我不希望将 totalTax 和 totalAmount 相加,而是要分别计算它们的总和。我正在查看 Collectors,但找不到任何允许一次性聚合多个字段的示例。

标签: javajava-streamcollectors

解决方案


使用 for 循环?

double taxSum = 0;
double amountSum = 0;
for (Itemized itemized : getCharges()) {
    taxSum += itemized.getTax();
    amountSum += itemized.getAmount();
}

推荐阅读