java 8 stream group by sum multiple fields

在 Java 8 中,可以使用 Stream API 的 groupingBy summingDouble 方法来对流中的元素进行分组并求和。

例如,假设你有一个名为 Transaction 的类,其中包含两个字段: type amount 。现在你想要按照 type 对交易进行分组,并将每组中的 amount 求和。可以这样做:

Map<String, Double> result = transactions.stream()
    .collect(Collectors.groupingBy(Transaction::getType,
                                   Collectors.summingDouble(Transaction::getAmount)));

如果你想要按照多个字段进行分组并求和,可以使用多级分组。例如,假设你还有一个名为 currency 的字段,想要按照 typecurrency 分别进行分组并求和,可以这样做:

Map<String, Map<String, Double>> result = transactions.stream()
    .collect(Collectors.groupingBy(Transaction::getType,
        Collectors.groupingBy(Transaction::getCurrency,
            Collectors.summingDouble(Transaction::getAmount))));

这将返回一个映射,其中键是交易类型,值是另一个映射,其中键是货币类型,值是该类型和货币的交易总额。

希望这些信息能帮到您。

    • 1151
  •