Java:多个List相同字段合并求和的实现
在Java开发中,处理集合(如List)的场景非常常见。尤其是在需要对多个List进行合并并对某些字段进行求和的时候,能够高效地完成操作是非常重要的。本文将通过示例演示如何实现多个List合并相同字段求和的功能。
背景知识
在业务系统中,常常会遇到需要对不同来源的数据进行合并的场景。例如,我们可能从不同的销售渠道获取销售数据,每个渠道的销售记录都有相关的字段,例如产品ID和销售额。我们的目标是将这些数据合并并计算总销售额。
基本概念
假设我们有两个List,分别存储了不同来源的销售记录。每条记录都包含一个productId
和对应的salesAmount
,我们需要将这些销售记录按照productId
合并,并求每个产品的总销售额。
代码示例
下面是一个简单的实现示例:
import java.util.*;
class SaleRecord {
private String productId;
private double salesAmount;
public SaleRecord(String productId, double salesAmount) {
this.productId = productId;
this.salesAmount = salesAmount;
}
public String getProductId() {
return productId;
}
public double getSalesAmount() {
return salesAmount;
}
@Override
public String toString() {
return "Product ID: " + productId + ", Total Sales: " + salesAmount;
}
}
public class SalesAggregator {
public static void main(String[] args) {
List<SaleRecord> list1 = Arrays.asList(
new SaleRecord("A001", 100.0),
new SaleRecord("A002", 150.0)
);
List<SaleRecord> list2 = Arrays.asList(
new SaleRecord("A001", 200.0),
new SaleRecord("A003", 300.0)
);
List<SaleRecord> mergedRecords = mergeAndSumSales(list1, list2);
// 输出结果
for (SaleRecord record : mergedRecords) {
System.out.println(record);
}
}
public static List<SaleRecord> mergeAndSumSales(List<SaleRecord> list1, List<SaleRecord> list2) {
Map<String, Double> salesMap = new HashMap<>();
// 处理第一个List
for (SaleRecord record : list1) {
salesMap.put(record.getProductId(), salesMap.getOrDefault(record.getProductId(), 0.0) + record.getSalesAmount());
}
// 处理第二个List
for (SaleRecord record : list2) {
salesMap.put(record.getProductId(), salesMap.getOrDefault(record.getProductId(), 0.0) + record.getSalesAmount());
}
// 将结果转换为List
List<SaleRecord> result = new ArrayList<>();
for (Map.Entry<String, Double> entry : salesMap.entrySet()) {
result.add(new SaleRecord(entry.getKey(), entry.getValue()));
}
return result;
}
}
代码解析
上述代码实现了一个SaleRecord
类,用于存储销售记录。SalesAggregator
类中,mergeAndSumSales
方法接收两个List类型的参数,并通过一个Map
来记录每个产品的总销售额。
- 初始化Map:使用
Map<String, Double>
来存储每个productId
及其销售额的累计值。 - 遍历List:分别遍历两个List,使用
Map
的getOrDefault
方法帮助我们简化判断逻辑。 - 转换为List:最终将结果转换回List并返回。
总结
通过以上的示例,我们可以看到在Java中使用Map
进行数据合并和求和的方式十分高效。该方法不仅简化了代码逻辑,还提高了代码的可读性和可维护性。这种技术在数据处理、报表生成等场景中应用广泛。如果你在项目中需要对集合数据进行求和或合并,不妨尝试这种方法来提高工作效率。