java - 在 Java 中使用迭代器的多个 If 条件

标签 java collections iterator

我有一个包含元素 1 到 10 的列表。 我尝试从中删除素数 2,3,5,7,然后使用迭代器打印列表的其余部分。但是此代码抛出 NoSuchElementException。 这是我的代码:

public static void editerate2(Collection<Integer> list3)
{
    Iterator<Integer> it=list3.iterator();
    while(it.hasNext())
    {
        if(it.next()==2 || it.next()==3 || it.next() ==5 || it.next()==7 ) 
        {
            it.remove();
        }
    }
    System.out.println("List 3:");
    System.out.println("After removing prime numbers  : " + list3);
}

这样做的正确方法是什么? 另外,使用“|”有什么区别?和“||” ???

最佳答案

每次调用 it.next() 时,迭代器都会前进到下一个元素。

我认为这不是您想要做的事情。

你应该这样做:

Iterator<Integer> it = list.iterator();

while (it.hasNext()) {
    Integer thisInt = it.next();
    if (thisInt == 2 || thisInt == 3 || thisInt == 5 || thisInt == 7) {
       it.remove();
    }
}
<小时/>

| 之间的区别和||:

如果您使用 || 并且第一部分为 true,则不会评估第二部分。

如果您使用 | 这两个部分将始终被评估。

这对于这样的情况很方便:

if (person == null || person.getName() == null) {
    // do something
}

如果您使用 | 并且 person 为 null,上面的代码片段将抛出 NullPointerException。

这是因为它会评估条件的两个部分,而后半部分将取消引用空对象。

关于java - 在 Java 中使用迭代器的多个 If 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831852/

相关文章:

java - AndroidAsyncHttp 错误

java - 使用 Java 进行搜索结果预览

java - 如何在java中对List中的map进行排序

java - 仅使用 java 8 lambda 将 List<Object> 转换为 List<List<String>>

vba - 如何识别对象是集合还是字典?

python - 当子列表的顺序无关紧要时,从列表列表中获取唯一元素

java - 字符串池的意外行为

java - volley json 数组只获取最后一个元素

iterator - rxjs,仅在上一个操作完成后才调用生成器上的下一个

c# - 数组从中间开始迭代