8

我希望迭代跳过前几个元素。elements是一个List<WebElement>。我想不是从头开始遍历列表,而是从中间的某个地方开始,我怎么能这样做?

for ( WebElement element : elements )
{
      //block of code
}
4

5 回答 5

17

对于许多想要对特定范围应用某些操作情况,可以使用ListsubList()

for (WebElement element : elements.subList(3, 7)) {
  // do stuff
}

这也适用于删除一些范围:

myList.subList(4, 14).clear();

请注意,subList仅存在于 上List,因此这不适用于 aSet或其他非 ListCollection对象。

于 2013-01-21T12:46:56.650 回答
10

如果elements是一个列表,您可以使用 listIterator,特别是方法elements.listIterator(index)。它将返回从元素 at 开始的列表迭代器index

例如:

for(ListIterator iter = elements.listIterator(2);iter.hasNext;) {
  WebElement element = (WebElement)iter.next;
  ...
}

如果elements不是列表,您仍然可以通过使用您的集合内容创建一个新列表来使用该方法。

于 2013-01-21T12:45:06.863 回答
5

您可以像本例一样使用 List.listIterator(int)

    List<WebElement> list = ...
    for(Iterator<WebElement> i = list.listIterator(1); i.hasNext();) {
        WebElement next = i.next();
    }

或者干脆

for(int i = 1; i < list.size(); i++) {
     WebElement e = list.get(i);
}

请注意,#1 使用 LinkedList 更快,而#2 使用 ArrayList 更快。有一个特殊的标记接口 java.util.RandomAccess 来确定哪个版本对给定列表更有效。

于 2013-01-21T12:46:19.503 回答
2

为什么不直接使用最简单最直接的方式呢?

int i = 0;
for (WebElement element : elements)
{
      if (/*i++ satisfies some condition*/) {
          //block of code
      }
}

或者,更原生的方式:在未增强的 for 循环中跟踪索引。

像创建子列表这样的其他方式看起来更漂亮,但这需要更多的时间和空间。

于 2013-01-21T12:53:18.680 回答
0

如果您想引用或制作您自己的,可以这么说,您可以使用数组列表。这将允许您通过引用访问点(如数组),然后您可以使用通用的 while(node.hasNext()) {...} 迭代到最后。

于 2013-01-21T12:54:43.177 回答