计算Java中多维数组列表之间的差异

时间:2018-03-28 13:53:03

标签: java arraylist collections difference

我有两个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;
}

但这会返回整个基本列表而不进行比较。

1 个答案:

答案 0 :(得分:1)

removeAll会移除依赖equals方法结果的项目。最简单的方法是:

  1. 使用对象作为ArrayLists的数据(不确定您是否已经这样做了)
  2. 在此对象中实现equals方法,仅当每个字段匹配
  3. 时才返回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);
        }
    }
    

    我知道上述实现不是完整的,但只是提出一个想法。

    您的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字段的类型,但您可以使用任何内容。