Java Streams Grouping & Summing Guide

In Java, you can use the Collectors.groupingBy method in the Stream API to group data streams, and then combine it with Collectors.summingInt, Collectors.summingLong or Collectors.summingDouble to perform summing operations on the grouped data.

Below is an example code showing how to group a data stream containing multiple objects by a certain property, and then perform a sum operation on each group.

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class Item {
    String category;
    int amount;

    public Item(String category, int amount) {
        this.category = category;
        this.amount = amount;
    }

    public String getCategory() {
        return category;
    }

    public int getAmount() {
        return amount;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Item> items = Arrays.asList(
                new Item("A", 10),
                new Item("B", 20),
                new Item("A", 30),
                new Item("B", 40),
                new Item("A", 50)
        );

        // 按照 category 分组,并对每个分组的 amount 求和
        Map<String, Integer> sumByCategory = items.stream()
                .collect(Collectors.groupingBy(Item::getCategory, Collectors.summingInt(Item::getAmount)));

        System.out.println(sumByCategory);
    }
}

The code above will output a Map containing the sum of different categories.

{A=90, B=60}
bannerAds