繁体   English   中英

Iterator.hasNext()在列表中的最后一项上似乎未返回false

[英]Iterator.hasNext() does not appear to return false on the last item in a List

我在循环遍历列表的for循环中有一个if-else函数。 当我到达此列表的最后一个元素时,我希望它采取措施,但似乎没有用。 这是我的代码的概述:

for(Item t: itemList){
    if(....){
         }
    else if(....){
         }
    else if(currentStartTime>previousFinishTime){
         System.out.println("C");
         if(itemList.iterator().hasNext()==false){
                System.out.println("end of array");
                EFTs.add(EFT);}  
    else{.....;}
      }

当我用列表中的最后一项触发此条件时(即,最后一项具有currentStartTime> previousFinishTime,我知道这是正确的,因为它显示C ),如果条件条件触发,则没有任何结果。 我是否误解了hasNext()函数的用途?

谢谢

itemList.iterator().hasNext()==false

itemList.iterator()引用一个全新的迭代器。 它没有引用for循环中使用的迭代器。 itemList.iterator()实际上总是从列表的开头开始,因此hasNext()会告诉您列表是否为空。

要使用这样的迭代器,您需要创建自己的循环,例如:

for(Iterator<Item> iter = itemList.iterator(); iter.hasNext(); ) {
    Item item = iter.next();
    if(iter.hasNext()) {
    }
}

但是有95%的时间,您应该能够在循环之后而不是在上一次迭代期间执行所需的任何操作。

使用“增强的”,您将无法访问为for操作创建的操作员。

您正在做的是每次创建一个新的运算符,因此它指向列表的开头。 显然,除非它是一个空列表,否则它将为hasNext()返回true

暂无
暂无

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

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