gpt4 book ai didi

Java有效地比较两个列表

转载 作者:行者123 更新时间:2023-12-04 08:47:15 25 4
gpt4 key购买 nike

我需要比较来自两个不同来源的两个列表的结果。

List<MyData> baseList = new ArrayList<>();
enter image description here
List<MyData> externalList = new ArrayList<>();
enter image description here
我需要比较两个列表上的 CFCHash 记录 w.r.t UserACCNUM,如果 CDCHash 有任何更改,我需要更新 baseList 中的特定记录。
我试过下面的循环,这听起来效率不高
for(MyData ext : externalList) {
for(MyaData base : baseList) {
if(ext.getCDCHash().equals(base.getCDCHash()) && ext.getAccNum().equals(base.getAccNum()) {
// no change
}
else {
// changes found - need to update
}
}
}
在这种情况下 list.stream() 是否有效?我有近 10 万条记录要比较。
我如何有效地实现这一目标?

最佳答案

您可以通过创建快速查找将二次算法转换为线性算法 Map两个列表中的一个,然后循环另一个列表,同时使用查找通过帐号在另一个列表中找到相应的记录。
JS 示例只是因为我们不能在这里运行 Java ;)
请注意,为了示例,我们假设两个列表的长度相同。

const listA = [{ hash: 'account1v1', account: 1 }, { hash: 'account2v1', account: 2 }];
const listB = [{ hash: 'account1v1', account: 1 }, { hash: 'account2v2', account: 2 }];

const dirtyRecords = findDirtyRecords(listA, listB);

console.log(dirtyRecords);

function findDirtyRecords(listA, listB) {
const listAMap = new Map();

for (const record of listA) listAMap.set(record.account, record);

return listB.filter(r => r.hash !== listAMap.get(r.account).hash);
}

关于Java有效地比较两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64251096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com