【发布时间】:2020-06-28 10:35:56
【问题描述】:
我有对象列表:
{
"rn": "14",
"time": "2020-06-16 16:47:55",
"id": 42332392988,
"termname": "S1160AFB",
"type": "100",
"trancode": "110",
"pan": "4790729949581839",
"amount": "360.96",
"approvalcode": "44444"
},
{
"rn": "15",
"time": "2020-06-16 16:48:55",
"id": 42330308379,
"termname": "S1160AFB",
"type": "100",
"trancode": "110",
"pan": "4149510064617121",
"amount": "360.96",
"approvalcode": "55555"
},
{
"rn": "13",
"time": "2020-06-16 16:49:11",
"id": 42332530886,
"termname": "S1160AFB",
"type": "420",
"trancode": "110",
"pan": "4790729949581839",
"amount": "360.96",
"approvalcode": "44444"
}
如果出现以下情况,我需要从列表对象中删除:
- 它们具有相同的字段批准代码。 (批准代码 - 唯一。并且不能超过两个相同)
- 在具有相同批准代码的两个对象中,您需要检查日期较大的对象,以及该对象类型是否为 420。从列表中删除这两个对象。
我是这样决定的:
-
我按批准代码和日期对列表进行排序。
List<Transaction> filteredTrans = transResponse.getTransaction().stream().sorted(Comparator.comparing(Transaction::approvalcode).thenComparing(Transaction::getTime)) .collect(Collectors.toList());
排序后,我比较两个最接近的对象。
for (int i=0; i<filteredTrans.size()-1; i++) {
if (filteredTrans.get(i).getApprovalcode().equals(filteredTrans.get(j).getApprovalcode()) && filteredTrans.get(j).getType().equals("420")) {
filteredTrans.remove(i);
filteredTrans.remove(j);
j++;
}
}
但我不喜欢代码的第二部分。能否请教一下如何改进?
【问题讨论】: