可以使用Stream API的collect
方法和Collectors.groupingBy
方法。假设有一个名为Transaction
的类,其中包含两个属性:type
和amount
。
首先,创建一个Transaction
类:
public class Transaction {
private String type;
private double amount;
public Transaction(String type, double amount) {
this.type = type;
this.amount = amount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
然后,使用以下代码将具有相同属性的对象金额汇总:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List transactions = new ArrayList<>();
transactions.add(new Transaction("A", 100));
transactions.add(new Transaction("B", 200));
transactions.add(new Transaction("A", 300));
transactions.add(new Transaction("C", 400));
transactions.add(new Transaction("B", 500));
Map result = transactions.stream()
.collect(Collectors.groupingBy(Transaction::getType, Collectors.summingDouble(Transaction::getAmount)));
System.out.println(result);
}
}
输出结果:
{A=400.0, B=700.0, C=400.0}
首先创建了一个包含多个Transaction
对象的列表。然后,使用stream()
方法创建一个Stream,接着使用collect()
方法将Stream转换为一个Map。在collect()
方法中,我们使用Collectors.groupingBy()
方法根据Transaction
对象的type
属性进行分组,并使用Collectors.summingDouble()
方法对每个分组的amount
属性求和。最后,将结果打印出来