在堆栈上查找了几个答案,并尝试在这个Simple way to compare 2 ArrayLists的帮助下做到了,但无法尝试找出似乎有问题的地方。为了总结不可见的代码,我创建了两个包含4个文件名的arraylist。现在,我试图获取第三个arraylist,它将仅包含这两个arraylist中的唯一值。 示例:第一个arraylist-一,二,三,四 第二个数组列表-一,三,五,七 第三阵列列表-二,四,五,七(解决方案阵列列表) 这是代码:
Collection<String> filesFromDir = new
ArrayList(Arrays.asList(listOfFilenamesWithNoExtension));
Collection<String> filesFromDB = new ArrayList(Arrays.asList(listOfFilesDB));
List<String> listDir = new ArrayList<String>(filesFromDir);
List<String> listDB = new ArrayList<String>(filesFromDB);
listDir.removeAll(listDB);
listDB.removeAll(listDir);
System.out.println("Unique values: ");
System.out.println(listDir);
System.out.println(listDB);
答案 0 :(得分:1)
复制第一个列表,并将其用于第二个列表的removeAll
。因为如果您从第一个列表中删除重复项,然后将其与第二个列表进行比较,则所有值都是唯一的,因为重复项已从第一个列表中删除。
Collection<String> listDir = new ArrayList(Arrays.asList("1","2", "3", "4", "5", "6", "7"));
Collection<String> listDirCopy = new ArrayList<>();
listDirCopy.addAll(listDir);
Collection<String> listDB = new ArrayList(Arrays.asList("1","3", "5", "7", "9"));
List<String> destinationList = new ArrayList<String>();
listDir.removeAll(listDB);
listDB.removeAll(listDirCopy);
destinationList.addAll(listDir);
destinationList.addAll(listDB);
System.out.println(destinationList);
答案 1 :(得分:0)
您好,抱歉我的初学者代码,但是您可以创建第三个arraylist,循环遍历第一个,然后将所有元素添加到第一个arraylist中。然后循环遍历第二个列表,并在第三个数组列表中添加元素(如果不存在)或删除(如果存在)。 看下面的代码,希望对您有帮助
public void sort(ArrayList<String> one, ArrayList<String> two){
ArrayList<String> three = new ArrayList<>();
three.addAll(one);
for (int i = 0; i < two.size(); i++) {
if (three.contains(two.get(i))){
three.remove(two.get(i));
}else {
three.add(two.get(i));
}
}
}
答案 2 :(得分:0)
在这种情况下,您不应使用removeAll:
listDir.removeAll(listDB);
listDB.removeAll(listDir);
因为一旦从listDir中删除公共元素“ One”,listDB仍然包含它,并且listDB.removeAll(listDir)
不会将其删除,因为listDir不包含它。
因此,您最终获得了listDB及其原始元素。
一种可能的解决方案是遍历列表并检查元素是否公用。 尽管列表大小相同,您仍可以在同一循环中遍历它们。
for(int i=0;i<listDB.size();i++){
if(!listDB.contains(listDir.get(i)){
resultList.add(listDir.get(i))
}
if(!listDir.contains(listDB.get(i)){
resultList.add(listDB.get(i))
}
}