Java List 相同条件数据合并相加
在实际开发中,我们经常会遇到需要将具有相同条件的数据进行合并并相加的情况。这对于对数据进行统计分析和生成报表非常有用。在Java中,我们可以通过List集合和Map集合来实现这一需求。接下来,我们将详细介绍如何使用Java来实现这一功能,并附上代码示例。
场景描述
假设我们有一个包含了多个商品销售数据的List集合,每个数据包含了商品名称和销售数量。我们希望将相同商品名称的销售数量合并相加,生成一个新的包含合并后数据的List集合。
实现步骤
1. 创建商品销售数据类
首先,我们需要创建一个类来表示商品销售数据,包括商品名称和销售数量两个属性。
public class SalesData {
private String productName;
private int salesQuantity;
public SalesData(String productName, int salesQuantity) {
this.productName = productName;
this.salesQuantity = salesQuantity;
}
// 省略 getter 和 setter 方法
}
2. 初始化商品销售数据List
接下来,我们初始化一个包含商品销售数据的List集合。
List<SalesData> salesDataList = new ArrayList<>();
salesDataList.add(new SalesData("商品A", 10));
salesDataList.add(new SalesData("商品B", 15));
salesDataList.add(new SalesData("商品A", 20));
salesDataList.add(new SalesData("商品C", 5));
3. 合并相同条件数据并相加
我们需要创建一个Map集合来存储商品名称和对应的销售数量总和。遍历商品销售数据List,将相同商品名称的销售数量相加并存储到Map中。
Map<String, Integer> mergedSalesData = new HashMap<>();
for (SalesData data : salesDataList) {
if (mergedSalesData.containsKey(data.getProductName())) {
int totalQuantity = mergedSalesData.get(data.getProductName()) + data.getSalesQuantity();
mergedSalesData.put(data.getProductName(), totalQuantity);
} else {
mergedSalesData.put(data.getProductName(), data.getSalesQuantity());
}
}
4. 生成合并后的数据List
最后,我们可以根据Map中的数据生成合并后的数据List。
List<SalesData> mergedSalesDataList = new ArrayList<>();
for (Map.Entry<String, Integer> entry : mergedSalesData.entrySet()) {
mergedSalesDataList.add(new SalesData(entry.getKey(), entry.getValue()));
}
完整代码示例
import java.util.*;
public class Main {
public static void main(String[] args) {
List<SalesData> salesDataList = new ArrayList<>();
salesDataList.add(new SalesData("商品A", 10));
salesDataList.add(new SalesData("商品B", 15));
salesDataList.add(new SalesData("商品A", 20));
salesDataList.add(new SalesData("商品C", 5));
Map<String, Integer> mergedSalesData = new HashMap<>();
for (SalesData data : salesDataList) {
if (mergedSalesData.containsKey(data.getProductName())) {
int totalQuantity = mergedSalesData.get(data.getProductName()) + data.getSalesQuantity();
mergedSalesData.put(data.getProductName(), totalQuantity);
} else {
mergedSalesData.put(data.getProductName(), data.getSalesQuantity());
}
}
List<SalesData> mergedSalesDataList = new ArrayList<>();
for (Map.Entry<String, Integer> entry : mergedSalesData.entrySet()) {
mergedSalesDataList.add(new SalesData(entry.getKey(), entry.getValue()));
}
// 输出合并后的数据
for (SalesData data : mergedSalesDataList) {
System.out.println("商品名称: " + data.getProductName() + ", 销售数量: " + data.getSalesQuantity());
}
}
static class SalesData {
private String productName;
private int salesQuantity;
public SalesData(String productName, int salesQuantity) {
this.productName = productName;
this.salesQuantity = salesQuantity;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getSalesQuantity() {
return salesQuantity;
}
public void setSalesQuantity(int salesQuantity) {
this.salesQuantity = salesQuantity;
}
}
}
结果展示
饼状图
pie
title 商品销售数量占比