我有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" }
现在,我必须比较existingList
和newList
。从上面的示例值中可以清楚地看出:
现在我需要在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"}
我怎样才能做到这一点?
答案 0 :(得分:2)
开发Java集合是为了在您使用set theory中的集合时与它们一起工作....
您可以轻松找到:
union :Col. A中的元素与Col.B中的所有元素合并
交叉点:Col. A和Col. B之间的共同元素
补充:作品A中的元素,但不在作品B
中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);
}