【问题标题】:java 8 stream group by and summing doublejava 8流分组和求和双
【发布时间】:2015-02-10 14:23:33
【问题描述】:

我对 java 8 中的流非常陌生,所以我的方法可能是错误的。

我有2个对象如下

object1 {
    BigDecimal amount;
    Code1 code1;
    Code2 code2;
    Code3 code3;
    String desc;
}

object2 {
    BigDecimal amount;
    Code1 code1;
    Code2 code2;
    Code3 code3;
}

所以我想收集 code1 && code2 && code3 相同的所有 object1,然后将数量加到 object2 列表中。

我没有代码来做这件事...我想编写一个代码来完成这项工作 我正在尝试从http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html实现一些东西

或者按部门计算所有工资的总和:

// Compute sum of salaries by department
Map<Department, Integer> totalByDept = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));

【问题讨论】:

  • BigDecimals 的总和如何最终成为 object2 的列表?请向我们展示真实代码。
  • 根据要求编辑了我的问题。
  • 那么,Department 类的等价物是什么?您需要这样一个类作为地图中的键,否则您无法返回地图。
  • Code1、code2 和 code3 实际上是类...我会编辑它
  • 这不能回答我的问题。您想按什么对对象进行分组?

标签: dictionary java-8 grouping java-stream collectors


【解决方案1】:

感谢 JB Nizet 为我指明了正确的方向。 我不得不修改我的 object2

public class CodeSummary {
    Double amount;
    CodeKey key;
//getters and setters

}
public class CodeKey {
    String code1;
    String code2;
    String code3;
//getters and setters

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof CodeKey)) return false;

        CodeKey that = (CodeKey) o;

        if (!code1.equals(that.code1)) return false;
        if (!code2.equals(that.code2)) return false;
        if (!code3.equals(that.code3)) return false;

        return true;
    }

@Override
public int hashCode() {
    int result = code1.hashCode();
    result = 31 * result + code2.hashCode();
    result = 31 * result + code3.hashCode();
    return result;
}

}

遍历object1并填充object2。一旦我填充了我的 object2(现在为 codeSymmary)。我可以使用下面的方法来完成这项工作。

        Map<CodeKey, Double> summaryMap = summaries.parallelStream().
                collect(Collectors.groupingBy(CodeSummary::getKey,
                Collectors.summingDouble(CodeSummary::getAmount))); // summing the amount of grouped codes.

如果有人以此为例。然后确保覆盖密钥对象中的 equal 和 hashcode 函数。否则分组将不起作用。

希望这对某人有所帮助

【讨论】:

  • 我使用它时出错。我需要按字符串分组,按整数求和。任何人都知道如何做到这一点。
  • 报告中有 Map> 是金额列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多