Java Stream APIでグループ化して合計する方法
Javaでは、データストリームをグループ化するためにStream APIのCollectors.groupingByメソッドを使用し、その後、Collectors.summingInt、Collectors.summingLong、またはCollectors.summingDoubleメソッドを組み合わせて、グループ化されたデータの合計を計算することができます。
以下は、複数のオブジェクトが含まれるデータストリームを特定の属性でグループ化し、各グループごとに合計操作を行う方法を示すサンプルコードです。
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);
    }
}
このコードは、異なるカテゴリーの合計を含むマップを出力します。
{A=90, B=60}