计算 Java 中的多维 ArrayList 之间的差异
Calculate the difference between Multidimensional ArrayLists in Java
我有两个 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 A 中不存在的列表。ArrayList 结果应该是
[[lgi09, Developer], [ltr09, Bereitschafter], [fmo09,Bereitschafter]]
我已经试过了:
public static Collection findDifferences(Collection base, Collection extension){
base.removeAll(extension);
return base;
}
但是这个 returns 没有比较的整个基本列表。
removeAll
删除依赖于 equals
方法结果的项目。最简单的方法是:
- 使用对象作为 ArrayList 的数据(不确定您是否已经这样做)
- 在此类对象中实现
equals
方法,仅当每个字段都匹配时才返回 true
编辑
类似于:
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);
}
}
我知道上面的实现并不完美,但只是提供一个想法。
您的 ArrayList 必须像这样构建:
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
字段的类型,但您可以使用任何类型。
我有两个 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 A 中不存在的列表。ArrayList 结果应该是
[[lgi09, Developer], [ltr09, Bereitschafter], [fmo09,Bereitschafter]]
我已经试过了:
public static Collection findDifferences(Collection base, Collection extension){
base.removeAll(extension);
return base;
}
但是这个 returns 没有比较的整个基本列表。
removeAll
删除依赖于 equals
方法结果的项目。最简单的方法是:
- 使用对象作为 ArrayList 的数据(不确定您是否已经这样做)
- 在此类对象中实现
equals
方法,仅当每个字段都匹配时才返回 true
编辑
类似于:
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);
}
}
我知道上面的实现并不完美,但只是提供一个想法。
您的 ArrayList 必须像这样构建:
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
字段的类型,但您可以使用任何类型。