2013-01-21 19 views
5

Voglio che l'iterazione salti i primi elementi. elements è un List<WebElement>. Vorrei scorrere la lista non dall'inizio, ma partendo da qualche parte nel mezzo, come potrei farlo?Come iniziare il iterazione attraverso una raccolta non dall'inizio

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

Cosa sono 'elementi', un' Elenco ', o solo un' Iterable 'o anche' WebElement [] '? –

+3

Se non dall'inizio, da che altro? Gli elementi –

+0

sono Elenco . –

risposta

13

Per molti casi in cui si desidera applicare qualche operazione ad una gamma specifica di List, è possibile use subList():

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

Questo funziona bene anche per la rimozione di un certo range:

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

Si noti che subList esiste solo su List, quindi questo non funzionerà su un Set o altri oggetti non elencati Collection.

+0

La soluzione soddisfa i miei requisiti. Grazie. –

9

Se elements è un elenco, è possibile utilizzare il listIterator, in particolare il metodo di elements.listIterator(index). Restituirà un elenco iteratore a partire dall'elemento index.

es:

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

Se elements non è un elenco, è ancora potrebbe usare questo approccio con la creazione di un nuovo elenco con il contenuto della vostra collezione.

4

È possibile utilizzare List.listIterator (int) come in questo esempio

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

o semplicemente

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

nota che # 1 è più veloce con LinkedList e # 2 è più veloce con ArrayList. C'è un'interfaccia marcatore speciale java.util.RandomAccess per determinare quale versione è più efficiente per una data lista.

+0

Il secondo metodo è lento se l'elenco non è accesso casuale (ad esempio un elenco collegato) –

2

Perché non usare solo il modo più semplice e diretto?

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

Oppure, più nativo: tenere traccia dell'indice in un ciclo non modificato.

Altro modo di creare un aspetto sublimatico, ma richiederà più tempo e spazio.

0

È possibile utilizzare un arraylist se si desidera fare riferimento o creare il proprio, per così dire. Questo ti permetterà di accedere ai punti per riferimento (come un array), quindi puoi scorrere con un generico while (node.hasNext()) {...} fino alla fine.

Problemi correlati