我有两个相同类型的arrayList,我想比较两个基于ValueList中的特定属性。 值列表比较两个ArrayList
ValueList A contains
1,10,5,
2,20,3
3,40,5,
4,60,8
ValueList B contains
2,20,3
3,40,5
我想根据line_num来比较两个列表,并创建另一个ArrayList的结果,如果line_num存在于值列表A,但不是在值列表B,然后在结果字段中的值有-1。结果应该是这样的;我不能写'找不到'的条件。有人可以帮我吗?
我的代码
List<Result> result= new ArrayList<Result>();
for(ValueList data1: valueListA) {
for (ValueList data2: valueListB) {
Result inter = new Result();
if(data1.getLine_num==data2.getLine_num) {
inter.setKey(data1.getKey());
inter.setValue(data1.getValue());
result.add(inter);
}
}
}
更新的代码其中工程:
public static List<Result> result;= new ArrayList<Result>();
....
int i1 = 0,int i2 = 0;
Result inter = new Result();
while (i1 < valueListA.size() && i2 < valueListB.size()) {
ValueList data1 = valueListA.get(i1);
ValueList data2 = valueListB.get(i2);
if (data1.getLine_num == data2.getLine_num) {
// Add the result.
result= new ArrayList<Result>();
inter.setValue(data1.getValue());
inter.setKey(data1-getKey())
result.add(inter);
i1++;
i2++;
} else if (data1.getLine_num < data2.getLine_num) {
result= new ArrayList<Result>();
// Add -1 because the data was not in valueListB.
inter.setValue(data1.getValue());
inter.setKey(-1);
result.add(inter);
i1++;
} else {
i2++;
}
}
为什么不能简单地用'列表#contains'?覆盖'ValueList#hashCode'和'ValueList#equals'。 – m0skit0
如果一行包含在B中而不是A中,该怎么办?你会忽略这个吗?如果在A中有2个项目具有相同的line_num,而B中只有1个项目具有这样的line_num?如果B中有一个项目在A中有两个匹配的项目会怎么样? –
@AdrianShum:如果一行在B中而不在A中,它将被忽略。line_num是唯一的,并且不会有重复。 –