Java 对象 List 分组求和

Java 是一种面向对象的编程语言,它提供了丰富的数据结构和算法库。在很多实际应用中,我们常常需要对一个对象的集合进行分组,并计算每个分组的总和。这些场景包括统计销售数据、按类别汇总商品数量等。本文将介绍如何使用 Java 对象 List 分组求和的方法,并提供相应的代码示例。

1. 列表和分组的概念

在开始之前,让我们先了解一下列表和分组的概念。

列表 是一种有序的数据结构,它可以存储多个对象。在 Java 中,我们可以使用 ArrayList、LinkedList 等类来表示列表。

分组 是将列表中的对象按照某个属性或条件进行分类,使得具有相同属性或满足相同条件的对象被放在同一个组中。在分组的基础上,我们可以对每个组进行求和操作。

2. Java 对象分组求和的实现

要对 Java 对象 List 进行分组求和,我们需要按照分组条件将对象分组,并在每个组内对对象进行求和操作。下面是一个基本的分组求和的示例代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class GroupingSum {

    public static void main(String[] args) {
        // 创建示例对象列表
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Alice", "A", 100));
        personList.add(new Person("Bob", "B", 200));
        personList.add(new Person("Carol", "A", 300));
        personList.add(new Person("Dave", "B", 400));

        // 按照属性分组求和
        Map<String, Integer> sumByGroup = personList.stream()
                .collect(Collectors.groupingBy(Person::getGroup, Collectors.summingInt(Person::getValue)));

        // 输出结果
        for (Map.Entry<String, Integer> entry : sumByGroup.entrySet()) {
            System.out.println("Group: " + entry.getKey() + ", Sum: " + entry.getValue());
        }
    }

    static class Person {
        private String name;
        private String group;
        private int value;

        public Person(String name, String group, int value) {
            this.name = name;
            this.group = group;
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public String getGroup() {
            return group;
        }

        public int getValue() {
            return value;
        }
    }
}

在上面的示例代码中,我们定义了一个名为 Person 的内部类,表示一个人的信息,包括姓名、分组名称和数值。我们创建了一个示例对象列表 personList,其中包含了四个对象。

使用 Java 8 引入的 Stream API,我们可以使用 Collectors.groupingBy() 方法按照分组条件 Person::getGroup 将对象分组,并使用 Collectors.summingInt() 方法对每个组内的对象进行求和操作。

最后,我们遍历分组求和的结果,并输出每个分组的总和。

3. 示例应用:统计商品销售数据

让我们以一个示例应用为例,展示如何使用 Java 对象 List 分组求和来统计商品销售数据。

假设我们有一个商品销售记录的列表,其中包含了每个商品的名称、类别和销售数量。我们需要统计每个类别的商品销售总量。这可以通过分组求和来实现。

下面是一个示例代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class SalesStatistics {

    public static void main(String[] args) {
        // 创建商品销售数据列表
        List<Product> productList = new ArrayList<>();
        productList.add(new Product("Apple", "Fruit", 100));
        productList.add(new Product("Banana", "Fruit", 200));
        productList.add(new Product("Orange", "Fruit", 300));
        productList.add(new Product("Beef", "Meat", 400));
        productList.add(new Product("Pork", "Meat", 500));
        productList.add(new Product("Chicken", "Meat", 600));

        // 按照类别分组求和
        Map<String, Integer> sum