【问题标题】:iterator, do something when hasNext() equals false迭代器,当 hasNext() 等于 false 时做一些事情
【发布时间】:2013-11-30 16:39:16
【问题描述】:

我有一个循环遍历ArrayList,但是当迭代到达此字符串列表中的最后一个字符串时,我想做一些事情。

这是怎么做到的?

Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {

            //do stuff here
            }

            do something to list string in list?

【问题讨论】:

  • 那么您想在迭代中找到 last 元素吗?为什么不直接做if(!i.hasNext()){
  • 你是想在最后一个元素之后做点什么,还是对最后一个元素做点什么?
  • 是的,当我发现它在数组中遍历了它之前的所有字符串时,对该字符串做一些事情
  • list.get(list.size() - 1) 将返回列表的最后一个元素。在循环之后使用它。

标签: java arraylist iterator


【解决方案1】:

在外部范围内有一个局部变量来记住最后一项:

String last = null;
while (iterator.hasNext()) {
  last = iterator.next();
}

... now last refers to the last item.

如果您想知道自己在循环中的最后一项,那么只需在调用next() 后使用hasNext() 进行检查以检索当前迭代的项。

while (iterator.hasNext()) {
  String s = iterator.next();
  if (!iterator.hasNext()) {
     // here s is guaranteed to refer to the last item
  }
}

【讨论】:

    【解决方案2】:
    String str = null;
    while (iterator.hasNext()) {
      str = iterator.next();//str will contain the string
    }
    System.out.print(str);
    

    arrayList.get(arrayList.size()-1);
    

    【讨论】:

      【解决方案3】:

      试试这样的:

      string lastItem = list.get(list.size() - 1);
      

      更新

      根据您的评论,您需要用户 iterator.hasNext() 以便您可以尝试(不推荐):

      for(int i=0;i<list.size();i++) 
      {
         if(!iterator.hasNext())
         {
           //do stuff here
         }
      }
      

      【讨论】:

      • 有没有办法说 iterator.hasNext() == false (意味着没有下一个元素所以你必须在最后一个)?
      • 你刚刚做到了。但是使用!iterator.hasNext() 会更干净。
      【解决方案4】:

      如果您想在循环内执行此操作并在列表为空时防止 NullPointerException,您可以这样做:

      Iterator<String> iterator = list.iterator();
      while (iterator.hasNext()) {
          String item = iterator.next();
          //do something here
          if(!iterator.hasNext()) {
              //do stuff with last item here
          }
      }
      

      【讨论】:

        【解决方案5】:

        试试这个代码:

        ArrayList<String> list = new ArrayList<>();
                list.add("One");
                list.add("Two");
                list.add("Three");
                list.add("Fore");
                list.add("Last");
        
                Iterator<String> iterator = list.iterator();
        
                while(iterator.hasNext()) {
                    String item = iterator.next();
                    i++;
                    if(!iterator.hasNext()) {
                        // do what you want with the last one
                        System.out.println(item);
                    }
                }
        

        希望对你有帮助,萨拉姆

        【讨论】:

        • iterator.hasNext() 正是您声称不存在的这种方法。
        • 谢谢 ^^ 我现在修改我的代码,我认为这好多了.. 再次感谢你:) Salam
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        相关资源
        最近更新 更多