Java如何根据集合进行分组求和

在实际开发中,经常会遇到需要对集合中的数据进行分组并求和的情况。这时候我们可以利用Java Stream API来实现这个功能。下面将通过一个具体的问题来介绍如何根据集合进行分组求和。

假设有一个List包含了多个Person对象,每个Person对象有姓名和年龄两个属性,我们需要根据姓名对Person进行分组,并计算每个组的年龄总和。

首先,我们定义Person类:

public class Person {
    private String name;
    private int age;

    // 构造函数、getters和setters省略
}

接下来,我们准备一个包含多个Person对象的List:

List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 25));
personList.add(new Person("Alice", 30));
personList.add(new Person("Bob", 22));

现在我们将使用Java Stream API来解决这个问题。我们可以通过Collectors.groupingBy方法对Person对象进行分组,然后使用Collectors.summingInt方法对每个分组进行求和。

Map<String, Integer> ageSumByPerson = personList.stream()
        .collect(Collectors.groupingBy(Person::getName, Collectors.summingInt(Person::getAge)));

上面的代码首先将Person对象按姓名进行分组,然后对每个分组的年龄进行求和得到一个Map,其中key为姓名,value为该组年龄总和。

最后,我们可以遍历这个Map来查看每个人的年龄总和:

ageSumByPerson.forEach((name, ageSum) ->
        System.out.println(name + ": " + ageSum));

通过以上代码,我们可以得到每个人的年龄总和:

Alice: 50
Bob: 47

这样,我们就成功地根据集合进行分组求和了。

流程图

flowchart TD
    Start --> InputData
    InputData --> GroupBy
    GroupBy --> SumByGroup
    SumByGroup --> OutputResult

通过上述方法,我们可以方便地根据集合进行分组求和。这种方法能够简洁高效地处理数据,并且利用了Java Stream API的强大功能,非常适合处理这类问题。希望本文对你有所帮助。