java stream group by and sum multiple fields

在 Java 8 中,你可以使用流的 collect 方法来分组并求和多个字段。

首先,需要定义一个 Collector 来收集和合并结果。这个 Collector 需要使用 Collectors.groupingBy Collectors.summingXXX 方法来分组并求和多个字段。其中, XXX 是你要求和的字段的类型。例如,如果你要对字符串字段求和,就使用 Collectors.summingInt ;如果你要对整数字段求和,就使用 Collectors.summingLong ;如果你要对浮点数字段求和,就使用 Collectors.summingDouble

然后,你可以在流上使用 collect 方法来应用这个 Collector

例如,假设你有一个名为 Item 的类,其中包含三个字段: category (字符串类型)、 quantity (整数类型)和 price (浮点类型)。现在你想要按 category 分组,并计算每组的 quantity price 的总和。你可以使用以下代码实现这个功能:

Map<String, Double> result = items.stream()
    .collect(Collectors.groupingBy(
        Item::getCategory,
        Collectors.summingDouble(Item::getPrice)

这段代码会对流中的所有项目按照 category 字段分组,并计算每组的 price 字段的总和。最终,它会返回

  •