计算 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 方法结果的项目。最简单的方法是:

  1. 使用对象作为 ArrayList 的数据(不确定您是否已经这样做)
  2. 在此类对象中实现 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 字段的类型,但您可以使用任何类型。