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