aa,这终于发生了,我寻求帮助:(
开始吧: 我有一个传入交易的列表,例如:
List<FinancialTransaction> incomingTransactions = new ArrayList();
incomingTransactions.add(new FinancialTransaction(1, 1, 2, 1000000));
incomingTransactions.add(new FinancialTransaction(2, 1, 2, 2000000));
incomingTransactions.add(new FinancialTransaction(3, 2, 1, 1000000));
incomingTransactions.add(new FinancialTransaction(4, 2, 1, 4000000));
incomingTransactions.add(new FinancialTransaction(5, 2, 3, 1000000));
FinancialTransaction POJO:
public class FinancialTransaction {
private Integer id;
private Integer srcId;
private Integer dstId;
private Long amount;
public Integer getId() {
return id;
}
//getters, setters, constructors, toString
}
然后,incomingTransactions移至下面列出的方法,该方法必须创建一个新Map,其键为FinancialTransaction的srcId和dstId,按此键分组,将分组对象的“ amount”值相加,然后将Id = sdcId和dstId放入新对象, srcId = this.srcId,dstId = this.dstId,amount =所有分组对象的总和:
public class TransactionMerger {
public static Map<String, FinancialTransaction> mergeTransactions(List<FinancialTransaction> financialTransactions) {
Map<String, FinancialTransaction> mergedTransactions = new HashMap<>();
for (FinancialTransaction ft: financialTransactions) {
String key = ft.getSrcId() + "" + ft.getDstId();
if (mergedTransactions.get(key) != null) {
mergedTransactions.put(key, ft);
} else {
// Don't know to write here :/
}
}
financialTransactions.clear();
return mergedTransactions;
}
}
此方法必须吸收incomingTransactions返回类似以下内容的方法:
Key: 12 Value: FinancialTransaction {12, 1, 2, 3000000} //summed first and second values in incoming list
Key: 21 Value: FinancialTransaction {21, 2, 1, 5000000} //summed third and fourth values in incoming list
Key: 23 Value: FinancialTransaction {23, 2, 3, 1000000} //returned fifth values
请帮助我没有主意,我已经知道如何使用多个值对组合键进行分组,但是总和分组-没有主意请帮忙!!!!
大家伙!
希望这可以帮助。我添加了评论,让我知道是否需要进一步说明。
First, you have to create merge function in your
FinancialTransaction
or in utility. for now, I'm adding in the above class.And now , let's group using
map.merge
在这里,分组将使用生成的密钥完成,当我们遇到重复的密钥(或类似的交易)时,它将应用合并功能,该功能基本上将求和并返回金融交易的更新参考。
注意:如注释中所指出,请小心如何生成用于分组的密钥。