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}
bannerAds