繁体   English   中英

Java重复捕获器循环仍然返回dupes

Java duplicate catcher for loop still returning dupes

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一种旨在从ArrayList中删除重复对象的方法。 这些对象属于自定义类IndividualEntry,其方法如下所示:

 private static ArrayList<IndividualEntry> cleanList(ArrayList<IndividualEntry> inputList){
        ArrayList<IndividualEntry> thisList = inputList;
        IndividualEntry thisEntry;
        IndividualEntry thatEntry;
        for(int i = 0; i<thisList.size();i++){
            thisEntry = thisList.get(i);
            System.out.println("First entry is "+thisEntry);
        for(int j = (i+1); j<thisList.size(); j++){
            thatEntry = thisList.get(j);
            System.out.println("Second entry is "+thatEntry);
            if(thisEntry.equals(thatEntry)){
                thisList.remove(thatEntry);
            System.out.println("Entry removed: "+thatEntry);
            }
        }
            }
        return thisList;
    }

该方法已成功删除某些重复项。 该方法运行之前的ArrayList如下所示(每个字母代表一个唯一的对象):

ABBCABBAABBBBC

运行该方法后,结果如下:

卡伯

我不明白为什么该方法会重新排列结果并仍然包含重复项,但是我怀疑这是由于thisList在内部for循环内更改了,但是整个for循环仍使用thisList的原始值。 那是对的吗? 解决办法是什么?

2 个回复

通过在列表上进行迭代时从列表中删除项目,您正在弄乱逻辑。 您不会像使用迭代器那样获得明显的显式失败,但是正弦循环不会考虑已删除的项,而只是丢失了项。

一种更简单的方法是利用JDK的LinkedHashSet ,它既可以保证每个值的单个实例,又可以保留插入顺序:

private static ist<IndividualEntry> cleanList(List<IndividualEntry> inputList) {
    return new ArrayList<>(new LinkedHashSet<>(inputList));
}

当然,这假设您的IndividualEntry类正确实现了equals(Object)hashCode()方法。

使用Java 8+,您可以执行以下操作删除重复项:

private static List<String> cleanList(List<String> inputList){
    return inputList.stream().distinct().collect(Collectors.toList());
}

这将创建List的流,仅接受唯一值,然后将它们收集到List

1 Oracle漏洞? SELECT不返回dupes,SELECT的INSERT具有重复的行

我正在从我正在研究的Oracle实例中获得一些奇怪的行为。 这是Itanium上的11gR1,没有RAC,没什么特别的。 最终,我在数据仓库场景中将数据从一个Oracle实例移动到另一个Oracle实例。 我有一个在数据库链接上运行的半复杂视图; 4个内部连接在大型桌子上,5个左连接 ...

6 ngRepeat:dupes,什么都没有重复

我正在学习Angular并遇到错误: 我正在尝试访问数据库中的技能表并检索其中的行。 在我的JS文件中,我有: 在我看来: 我尝试过更改行,并确保其中没有重复项,但这不能消除错误。 ...

7 尝试在Java中捕获无限循环[重复]

这个问题已经在这里有了答案: 使用InputMismatchException进行try / catch创建无限循环 7个答案 我真的不知道这个问题... 如果数字不正确,该块将捕获异常,当我输入-1或0时,它将捕获异常,并要求我再次输入数字...但是如果我输 ...

8 Java:while循环不会返回[重复]

这个问题已经在这里有了答案: 如何比较Java中的字符串? 23个答案 Java的新手,正在上大学。 我正在编写一个程序,要求用户提供互联网套餐,以便可以计算他们的账单。 这是我要求他们打包的代码段,必须确认他们已经回答了A,B或C。 由于某些原因, ...

9 java尝试最后捕获-返回[重复]

这个问题已经在这里有了答案: 尝试并最终给出不带return语句的异常,但是在方法 3中 编写return语句时也没有异常 试用try catch最终用例- 输出: 如果代码修改为 输出: 问题 -是否存在一些堆栈概念,其中在t ...

2014-04-08 23:38:45 3 937   java
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM