2013-01-21 110 views
5

我想迭代跳過前幾個元素。 elementsList<WebElement>。我想從頭開始遍歷列表,但是從中間的某個地方開始,我怎麼能這樣做呢?如何開始迭代而不是從一開始

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

什麼是'元素','列表',或者僅僅是'Iterable '甚至是'WebElement []'? –

+3

如果不是從一開始,從其他什麼? –

+0

元素是列表。 –

回答

13

對於您希望將一些操作適用特定範圍很多情況下List,你可以use subList()

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

這也工作正常,消除一些範圍:

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

請注意,subList只存在於List,所以這不會在Set或其他非列表Collection對象。

+0

您的解決方案符合我的要求。謝謝。 –

9

如果elements是一個列表,你可以使用的ListIterator,具體的方法elements.listIterator(index)。它將返回一個列表迭代器,開始於index處的元素。

E.g:

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

如果elements不是一個列表,你仍然可以通過創建您的收藏內容的新列表,用這種方法。

4

您可以在這個例子中

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的更快使用List.listIterator(INT)作爲。 有一個特殊的標記接口java.util.RandomAccess來確定給定列表的哪個版本更高效。

+0

如果列表不是隨機訪問(如鏈接列表),則第二種方法很慢 –

2

爲什麼不使用最簡單最直接的方式?

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

或者更原始的方式:在一個平穩的for-loop中跟蹤索引。

其他方式創建子列表看起來更漂亮,但這需要更多的時間和空間。

0

如果你想引用或者自己創建,你可以使用arraylist。這可以讓你通過引用訪問點(就像數組一樣),然後你可以通過一個通用的 (node.hasNext()){...}來遍歷到最後。

相關問題