java - जावा 8 इंडेक्स/रेंज के साथ लूप के लिए बढ़ाया गया




java-8 apache-commons (5)

क्या जावा में लूप के लिए एक इंडेक्स / रेंज निर्दिष्ट करना संभव है?

उदाहरण के लिए मेरे पास एक सूची है: List<String> list;

और मैं 0 के बजाय इंडेक्स 1 से लूप चलाना चाहता हूं:

for(String s : list(start from index 1))

या सूचकांक ५ तक

for(String s : list(end at index 5))

मुझे पता है कि मैं लूप के लिए पारंपरिक का उपयोग कर सकता हूं या लूप के लिए बढ़ाया के अंदर एक काउंटर रख सकता हूं लेकिन मैं जानना चाहता था कि क्या जावा या अपाचे संग्रह में कुछ बॉक्स से बाहर है?


जावा 8 में हमारे पास स्ट्रीम एपीआई है, जिसे हम कस्टम इंडेक्स के साथ सूची में पुनरावृत्त करने के लिए उपयोग कर सकते हैं:

List<String> evenIndexes = IntStream
  .range(0, names.length)
  .filter(i -> i % 2 == 0)
  .mapToObj(i -> names[i])
  .collect(Collectors.toList());

range विधि में, आप 1 से शुरू कर सकते हैं, और / या 5 से पुनरावृति कर सकते हैं।


मैं इस मामले में subList का उपयोग subList :

for(String s : list.subList(1, list.size()))

तथा

for(String s : list.subList(0, 6))

यह list.subList(1, list.size()) साथ संभव है, लेकिन यह सूची को प्रस्तुत करने के लिए प्रदर्शन जुर्माना जोड़ देगा। इस मामले में लूप के लिए पारंपरिक का उपयोग करना बेहतर है।

// लूप प्रत्येक पुनरावृत्ति में गणना परफॉर्मेंस पेनल्टी से बचने के लिए पहले आकार की गणना करें

int size = list.size();

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

लूप के लिए पारंपरिक इस आवश्यकता के लिए "आउट ऑफ द बॉक्स" समाधान है:

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

और (यदि List में कम से कम 5 तत्व हैं):

for (int i = 0; i < 5; i++) {
    String s = list.get(i);
    ...
}

आप इसका उपयोग कर सकते हैं

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




apache-commons