【发布时间】:2020-09-03 15:25:10
【问题描述】:
啊啊啊,终于发生了,我请求帮助:(
让我们开始吧: 我有一个传入交易的列表,例如:
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));
金融交易 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,键为srcId,dstId为FinancialTransaction,按此键分组,对分组对象的“数量”值求和,并放入Id = sdcId的新对象and dstId, srcId = this.srcId, dstId = this.dstId, and 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
请帮助我没有想法,我已经知道如何用复合键分组,从几个值,但是总和和分组 - 没有想法请帮助!!!!!!
谢谢大家!!!
【问题讨论】:
-
我希望您只有 9 个源/目标 ID,否则您的密钥将不明确(例如
12 + "" + 3和1 + "" + 23) -
你知道
Map.merge方法吗? -
@AndyTurner 是的,谢谢你,我忽略了这个案例 :( 也许我会在数字前添加一些空值,以使 smth 像 scr - 000001+ dst - 000002 = key- 000001000002,是坏还是坏?
-
或者只是在中间放一个冒号。
-
@AndyTurner 太棒了!谢谢)))
标签: java collections stream java-stream pojo