为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2022-09-22 10:56:05

在堆栈上查看了几个答案,试图借助这一种简单的方法来比较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);


查看完整描述

3 回答

?
catspeake

TA贡献772条经验 获得超0个赞

复制第一个列表,并将其用于第二个列表。因为如果您从第一个列表中删除重复项,然后将其与第二个列表进行比较,则所有值都将是唯一的,因为重复项已从第一个列表中删除。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);


查看完整回答
反对 回复 2022-09-22
?
繁星coding

TA贡献1441条经验 获得超4个赞

在这种情况下,不应使用“全部删除”:


listDir.removeAll(listDB);

listDB.removeAll(listDir);

因为一旦你从 listDir 中删除了公共元素“一”,listDB 仍然包含它,并且不会被删除,因为 listDir 不包含它。所以你最终会得到列表DB,其中包含它的原始元素。listDB.removeAll(listDir)


一种可能的解决方案是遍历两个列表并检查元素是否通用。尽管列表大小相同,但您可以在同一循环中遍历它们。


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

  }


}


查看完整回答
反对 回复 2022-09-22
?
哈士奇WWW

TA贡献1482条经验 获得超6个赞

你好,对不起我的初学者代码在这里,但你可以做第三个数组列表,循环通过第一个,然后在第一个数组列表中添加所有元素。然后遍历第二个列表,并在第三个数组列表中添加元素(如果不存在)或删除元素(如果存在)。看看下面的代码,希望它有帮助


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

            }

        }

    }


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信