我有兩個相同類型的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是唯一的,並且不會有重複。 –