क्या जावा 5 फोरैच लूप में पहले पुनरावृत्ति को छोड़ने का एक शानदार तरीका है?जावा फोरैच पहले पुनरावृत्ति को छोड़ दें
उदाहरण छद्म कोड:
for (Car car : cars) {
//skip if first, do work for rest
.
.
}
क्या जावा 5 फोरैच लूप में पहले पुनरावृत्ति को छोड़ने का एक शानदार तरीका है?जावा फोरैच पहले पुनरावृत्ति को छोड़ दें
उदाहरण छद्म कोड:
for (Car car : cars) {
//skip if first, do work for rest
.
.
}
मैं इसे सुंदर, लेकिन शायद एक "प्रथम" बूलियन का उपयोग कर की तुलना में बेहतर फोन नहीं होगा:
for (Car car : cars.subList(1, cars.size()))
{
.
.
}
उसके अलावा, शायद कोई सुरुचिपूर्ण विधि ।
स्पष्ट रूप से यह केवल तभी काम करता है यदि आपके पास कोई सूची है :) –
क्या सभी ऑर्डर किए गए संग्रह प्रकार और सरणी में ऐसा "सबसेट" प्रकार कमांड नहीं है? – RHSeeger
@RHSeeger नहीं, मुझे ऐसा नहीं लगता है। मेरा मतलब है, एक सूची जो एक सूची सूची बनाता है वह तथ्य है कि इसे आदेश दिया गया है, तो आप एक अनियमित संग्रह के सबसेट की सीमा निर्दिष्ट कैसे कर सकते हैं? मुझे लगता है कि आप एक इटरेटर के पहले पुनरावृत्ति को छोड़ सकते हैं, लेकिन इस बात की कोई गारंटी नहीं होगी कि आप हमेशा वही तत्व छोड़ दें। –
सुरुचिपूर्ण? ज़रुरी नहीं। आपको बुलियन की जांच/सेट करने की आवश्यकता होगी।
प्रत्येक-लूप प्रत्येक व्यावहारिक उद्देश्यों के लिए एक पुनरावर्तक का उपयोग करने के लिए फैंसी वाक्यविन्यास के लिए है। आप अपने लूप को शुरू करने से पहले एक इटरेटर का उपयोग कर आगे बढ़ रहे हैं और आगे बढ़ रहे हैं।
मैं एक जावा व्यक्ति नहीं हूँ, लेकिन आप उपयोग कर सकते हैं:
for (Car car : cars.tail())
java.util से के माध्यम से Groovy JDK
क्या यह मानता है कि कार एक सूची है? –
Seana के कोड एक छोटे त्रुटि है: sublist को दूसरा तर्क एक विशेष सूचकांक के रूप में व्यवहार किया जाता है, इसलिए हम बिल्कुल
for (Car car : cars.subList(1, cars.size()) {
...
}
लिख सकते हैं (मैं जवाब पर टिप्पणी करने में सक्षम होने के लिए नहीं है, इसलिए । नया उत्तर मैं एक निश्चित प्रतिष्ठा की जरूरत है कि क्या करना
आपको अधिक प्रतिनिधि - अच्छी पकड़ की आवश्यकता हो सकती है। –
अब आप [टिप्पणी] (http://stackoverflow.com/privileges/comment) में सक्षम होना चाहिए। – Ishtar
धन्यवाद! उत्तर अपडेट –
मैं यह करने के लिए देर से एक सा आ गया है), लेकिन आप एक सहायक विधि का उपयोग कर सकता है, कुछ की तरह:
public static <T> Iterable<T> skipFirst(final Iterable<T> c) {
return new Iterable<T>() {
@Override public Iterator<T> iterator() {
Iterator<T> i = c.iterator();
i.next();
return i;
}
};
}
और का उपयोग यह कुछ इस तरह:
public static void main(String[] args) {
Collection<Integer> c = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
for (Integer n : skipFirst(c)) {
System.out.println(n);
}
}
सामान्यीकरण छोड़ने के लिए "n" पाठक :)
संपादित के लिए एक व्यायाम के रूप में छोड़ दिया जाता है: ध्यान से पर, मुझे लगता है कि देखने के अमरूद Iterables.skip(...)
here है।
अमरूद Iterables.skip()
का उपयोग करें।
कुछ की तरह:
for (Car car : Iterables.skip(cars, 1)) {
// 1st element will be skipped
}
(msandiford's answer के अंत से इस समझे और यह एक स्टैंडअलोन जवाब बनाना चाहते थे)
मुझे यह दृष्टिकोण पसंद है - बहुत साफ है। धन्यवाद –
ऐसा नहीं है सुरुचिपूर्ण लेकिन iterators
Iterator<XXXXX> rows = array.iterator();
if (rows.hasNext()){
rows.next();
}
for (; rows.hasNext();) {
XXXXX row = (XXXXX) rows.next();
}
के साथ के साथ काम नया जावा 8 Stream API यह वास्तव में बहुत ही सुरुचिपूर्ण हो जाता है।बस skip()
विधि का उपयोग करें:
cars.stream().skip(1) // and then operations on remaining cars
इस सुरुचिपूर्ण नहीं हो सकता है, लेकिन एक पाश के लिए बाहर एक पूर्णांक चर को प्रारंभ और पाश के भीतर हर यात्रा के साथ इसे बढ़ाने के सकता है। अगर काउंटर से बड़े 0.
int counter = 0;
for (Car car : cars) {
//skip if first, do work for rest
if(counter>0){
//do something
}
counter++;
}
संदर्भ के लिए है आपका कार्यक्रम केवल अमल होता है, Java5 नहीं 'नई' 5-6 साल के लिए किया गया है। – cHao
मुझे संदेह है कि यह कुछ ऐसा है जो फोरैच लूप को स्पष्ट रूप से संभालने का इरादा नहीं था। – Doug
मान लीजिए कि मुझे यह कहना चाहिए था * नया *: पी –