Java根据字段分组求和金额

sullay

关注

阅读 39

2023-08-07

如果你有一个数据集,希望按照某个字段进行分组,并计算每个分组中金额的总和,你可以使用Java的Stream API来实现。下面是一个示例代码:

假设你有一个包含以下数据的类Transaction

public class Transaction {
    private String category;
    private double amount;

    public Transaction(String category, double amount) {
        this.category = category;
        this.amount = amount;
    }

    public String getCategory() {
        return category;
    }

    public double getAmount() {
        return amount;
    }
}

现在,假设你有一个List<Transaction>,其中包含了多个交易记录。你可以按照category字段进行分组,并计算每个分组中金额的总和,可以按照以下方式实现:

import java.util.*;
import java.util.stream.Collectors;

public class GroupAndSum {
    public static void main(String[] args) {
        List<Transaction> transactions = new ArrayList<>();
        transactions.add(new Transaction("category1", 100.0));
        transactions.add(new Transaction("category2", 200.0));
        transactions.add(new Transaction("category1", 50.0));
        transactions.add(new Transaction("category3", 300.0));
        transactions.add(new Transaction("category2", 150.0));

        Map<String, Double> sumByCategory = transactions.stream()
                .collect(Collectors.groupingBy(Transaction::getCategory, Collectors.summingDouble(Transaction::getAmount)));

        System.out.println("Category\tSum");
        for (Map.Entry<String, Double> entry : sumByCategory.entrySet()) {
            System.out.println(entry.getKey() + "\t" + entry.getValue());
        }
    }
}

这个示例首先创建了一个List<Transaction>来存储交易记录。然后,使用Java 8的Stream API将交易记录按照category字段进行分组,并使用Collectors.summingDouble()计算每个分组中金额的总和。最后,通过遍历结果的Map<String, Double>,输出每个分组的category和对应的总和。

运行上述代码,你将得到类似以下的输出:

Category    Sum
category1   150.0
category2   350.0
category3   300.0

这表明按照分类分组后,每个分组中金额的总和。你可以根据自己的数据结构和字段名称作出相应的调整。

精彩评论(0)

0 0 举报