【发布时间】:2017-09-13 12:03:31
【问题描述】:
我有一个功能,我需要检查两个列表中的数据是否匹配。
该列表是Map <String, Object> 类型的链表。我应该如何迭代以最有效的方式比较列表中的每个项目?
现在我正在尝试做这样的事情:
public boolean compare(List<Map<String, Object>> A,
List<Map<String, Object>> B) {
//Code for iteration
boolean result = false;
if(A.size() == B.size()) {
int count = 0;
for(Map<String, Object> a : A)
{
for(Map<String, Object> b : B)
{
if (a.get('aID') == b.get('aID'))
count++;
}
}
if(count == A.size()) {
result = true;
}
}
else {
//Data reconciliation failed :: Data size mismatch
}
return result;
}
但这是一种低效的方法,因为 A 中的每个项目都与 B 中的每个项目进行比较。
有更好的方法吗?
【问题讨论】:
-
对于基本的
Java实现,例如LinkedList,equals(Object other)方法应该能正确地做你想做的事情。 -
同样,对于 Object 不要使用 ==,使用 Object.equals()。
-
列表是不同的。它们是某些表的行映射列表。两个表中的数据相似,但表结构不同,因此我在回填后对数据进行协调,这需要比较每个条目。它们不是同一个对象。
-
A 是表 A 的行列表,B 是表 B 的行列表。它们具有相同的数据,但表结构不同,因此需要对每一行进行比较以进行验证。
-
这里有编译错误,
a不在定义的范围内。if(count == a.size()) { result = true; },因此您的代码无论如何都不应该编译。 Aka,修复你的缩进并确保你的括号匹配。字符串文字也用双引号而不是单引号表示
标签: java list foreach hashmap iterator