如何比较3个ArrayLists并获得3个新ArrayLists的差异?

时间:2017-03-06 11:07:39

标签: java android arraylist

我有3个ArrayLists。第一个列表是常量,总是有7个值(一周中的几天)。

ArrayList<String> allAvailableValues = new ArrayList<String>();

allAvailableValues.add("MON");
allAvailableValues.add("TUE");
allAvailableValues.add("WED");
allAvailableValues.add("THU");
allAvailableValues.add("FRI");
allAvailableValues.add("SAT");
allAvailableValues.add("SUN");

第二个ArrayList是Days的集合(它将始终是First ArrayList的子集)。

ArrayList<String> existingList = DBmanager.getExistingDayList();

// sample output = {"MON", "WED", "THU", "FRI", "SAT" }

第三个ArryList也是Days的集合,也是First ArrayList的一个子集。

ArrayList<String> newList = DBmanager.getUpdatedDayList();

// sample output = {"MON", "TUE", "THU", "SAT" }

现在,我必须比较existingListnewList。从上面的示例值中可以清楚地看出:

  1. &#34; WED&#34;和#34; FRI&#34;已在新的ArrayList中删除。
  2. &#34; TUE&#34;已添加到新的ArrayList中。
  3. &#34; MON&#34;,&#34; THU&#34;,&#34; SAT&#34;,&#34; SUN&#34;
  4. 现在我需要在3个新的ArrayLists中记录比较结果。

    ArrayList<String> values_to_be_removed = new ArrayList<String>();
    
    // expected output = {"WED", "FRI"}
    
    ArrayList<String> values_to_be_inserted = new ArrayList<String>();
    
    // expected output = {"TUE"}
    
    ArrayList<String> values_not_changed = new ArrayList<String>();
    
    // expected output = {"MON", "THU", "SAT", "SUN"}
    

    我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

开发Java集合是为了在您使用set theory中的集合时与它们一起工作....

您可以轻松找到:

union :Col. A中的元素与Col.B中的所有元素合并

交叉点:Col. A和Col. B之间的共同元素

补充:作品A中的元素,但不在作品B

enter image description here

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#retainAll(java.util.Collection)  https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#removeAll(java.util.Collection)  https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#addAll(java.util.Collection,%20T...)

答案 1 :(得分:0)

你可以循环遍历它,并使用一系列if语句来检查发生了什么,使用contains函数。

如果值在旧列表中并且现在在旧列表中,则将其添加到&#34;插入列表&#34;。相反的结果是将这一天添加到&#34;删除列表&#34;。

另外:由于旧的和新的列表没有包含那一天,因为你的输出没有改变似乎只适用,我会假设&#39; s是什么&# 39; s应该包含。

这是一个例子:

for(String day : allAvailableValues){
    boolean inOld = existingList.contains(day);
    boolean inNew = newList.contains(day);
    if(inOld == false && inNew == false)
        values_not_changed.add(day);
    else if(inOld == true && inNew == false)
        values_to_be_removed.add(day);
    else if(inOld  == false && inNew == true)
        values_to_be_inserted.add(day);
}