2013-01-21 46 views
5

मैं पहले कुछ तत्वों को छोड़ने के लिए पुनरावृत्ति चाहता हूं। elements एक List<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 पर मौजूद है, इसलिए यहपर काम नहीं करेगाया अन्य गैर-सूची Collection ऑब्जेक्ट्स।

+0

आपका समाधान मेरी आवश्यकता को पूरा करता है तो दूसरी विधि धीमी है। धन्यवाद। –

9

तो elements एक सूची है, तो आप listIterator, विशेष रूप से विधि elements.listIterator(index) इस्तेमाल कर सकते हैं। यह index पर तत्व पर शुरू होने वाली एक सूची इटरेटर वापस करेगा।

उदा:

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 
     } 
} 

या, अधिक मूल तरीका: एक अप्रत्याशित फॉर-लूप में इंडेक्स का ट्रैक रखें।

अन्य तरह से सुस्त दिखने वाले फैनसीयर बनाने की तरह, लेकिन इसमें अधिक समय और स्थान लगेगा।

0

यदि आप संदर्भ देना चाहते हैं, तो आप एक सरणी सूची का उपयोग कर सकते हैं, या बोल सकते हैं। यह आपको संदर्भ (जैसे सरणी) के बिंदुओं तक पहुंचने देगा, फिर आप अंत में एक सामान्य (node.hasNext()) {...} के साथ पुन: प्रयास कर सकते हैं।

संबंधित मुद्दे