我有两个ArrayLists保存为集合。
ArrayList A包含
[[lgi09, Verantworlichter], [mne09, Developer], [root, Verantworlichter]]
ArrayList B包含
[[lgi09, Verantwortlicher], [lgi09, Developer], [ltr09, Bereitschafter], [fmo09, Bereitschafter]]
我必须比较ArrayLst A和ArrayLst B.结果ArrayList应该包含ArrayList中不存在的List .ArrayList结果应该是
[[lgi09, Developer], [ltr09, Bereitschafter], [fmo09,Bereitschafter]]
我已经尝试过这样:
public static Collection findDifferences(Collection base, Collection extension){
base.removeAll(extension);
return base;
}
但这会返回整个基本列表而不进行比较。
答案 0 :(得分:1)
removeAll
会移除依赖equals
方法结果的项目。最简单的方法是:
equals
方法,仅当每个字段匹配修改强>
类似的东西:
public class Data {
private String code, word;
public Data(String code, String word){
this.code = code;
this.word = word;
}
@Override
public boolean equals(Object o){
Data d = (Data) o;
return this.code.equals(d.code) && this.word.equals(d.word);
}
}
我知道上述实现不是完整的,但只是提出一个想法。
您的ArrayLists必须像这样构建:
Collection a = new ArrayList();
a.add(new Data("lgi09", "Verantworlichter"));
a.add(new Data("mne09", "Developer"));
a.add(new Data("root", "Verantworlichter"));
然后,您可以隐式使用equals
来电removeAll
:
public static Collection findDifferences(Collection base, Collection extension){
base.removeAll(extension);
return base;
}
请注意,在此示例中,我使用String
作为Data
字段的类型,但您可以使用任何内容。