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}