从具有集合的两个数组列表中获取唯一值

在堆栈上查看了几个答案,试图借助这一种简单的方法来比较2个ArrayLists,但无法尝试找出似乎存在的问题。为了总结不可见的代码,我创建了两个包含 4 个文件名的数组列表。现在im试图获取第三个数组列表,该列表将仅包含这两个数组列表中的唯一值。示例:第一个数组列表 - 一个、两个、三个、四个第二个数组列表 - 一个、三个、五个、七个 第三个数组列表 - 二个、四个、五个、七个(解决方案数组列表) 代码如下:

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);


繁星淼淼
浏览 137回答 3
3回答

catspeake

复制第一个列表,并将其用于第二个列表。因为如果您从第一个列表中删除重复项,然后将其与第二个列表进行比较,则所有值都将是唯一的,因为重复项已从第一个列表中删除。removeAllCollection<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>();&nbsp;listDir.removeAll(listDB);listDB.removeAll(listDirCopy);destinationList.addAll(listDir);destinationList.addAll(listDB);System.out.println(destinationList);

繁星coding

在这种情况下,不应使用“全部删除”:listDir.removeAll(listDB);listDB.removeAll(listDir);因为一旦你从 listDir 中删除了公共元素“一”,listDB 仍然包含它,并且不会被删除,因为 listDir 不包含它。所以你最终会得到列表DB,其中包含它的原始元素。listDB.removeAll(listDir)一种可能的解决方案是遍历两个列表并检查元素是否通用。尽管列表大小相同,但您可以在同一循环中遍历它们。for(int i=0;i<listDB.size();i++){&nbsp; if(!listDB.contains(listDir.get(i)){&nbsp;&nbsp; &nbsp; resultList.add(listDir.get(i))&nbsp; }&nbsp; if(!listDir.contains(listDB.get(i)){&nbsp;&nbsp; &nbsp; resultList.add(listDB.get(i))&nbsp; }}

哈士奇WWW

你好,对不起我的初学者代码在这里,但你可以做第三个数组列表,循环通过第一个,然后在第一个数组列表中添加所有元素。然后遍历第二个列表,并在第三个数组列表中添加元素(如果不存在)或删除元素(如果存在)。看看下面的代码,希望它有帮助public void sort(ArrayList<String> one, ArrayList<String> two){&nbsp; &nbsp; &nbsp; &nbsp; ArrayList<String> three = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; three.addAll(one);&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < two.size(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (three.contains(two.get(i))){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; three.remove(two.get(i));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; three.add(two.get(i));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java