जावा में एक सूची बनाने के लिए सबसे स्पष्ट तरीका क्या है?
मैं इसे करने के कई तरीकों को जानता हूं, लेकिन मैं सोच रहा हूं कि सबसे अच्छा तरीका क्या है (जहां "सबसे अच्छा" का मतलब सबसे स्पष्ट और / या सबसे छोटा है, सबसे कुशल नहीं है।
मेरे पास एक सूची है और मैं इसके ऊपर लूप करना चाहता हूं, प्रत्येक मूल्य को प्रिंट करना। मैं प्रत्येक आइटम के बीच अल्पविराम मुद्रित करना चाहता हूं, लेकिन पिछले एक के बाद (न ही पहले वाले से पहले)।
List --> Item ( , Item ) *
List --> ( Item , ) * Item
नमूना समाधान 1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
नमूना समाधान 2 - एक सबलिस्ट बनाएं:
if (list.size()>0) {
System.out.print(list.get(0)); // no comma
List theRest = list.subList(1, list.size());
for (Item i : theRest) {
System.out.print(", "+i); // comma
}
}
नमूना समाधान 3:
Iterator<Item> i = list.iterator();
if (i.hasNext()) {
System.out.print(i.next());
while (i.hasNext())
System.out.print(", "+i.next());
}
ये पहले आइटम को विशेष रूप से मानते हैं; इसके बजाय पिछले एक विशेष रूप से इलाज कर सकता है।
संयोग से, यहाँ कैसे है List
toString
है कार्यान्वित (यह से विरासत में मिली है AbstractCollection
), जावा 1.6 में:
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
यह अंतिम आइटम के बाद अल्पविराम से बचने के लिए लूप को जल्दी से बाहर निकालता है। BTW: यह पहली बार है जब मुझे याद आया "(यह संग्रह)"; इसे भड़काने के लिए यहाँ कोड है:
List l = new LinkedList();
l.add(l);
System.out.println(l);
मैं किसी भी समाधान का स्वागत करता हूं, भले ही वे अप्रत्याशित पुस्तकालयों का उपयोग करें (regexp?); और यह भी जावा अलावा अन्य भाषाओं में समाधान (जैसे मुझे लगता है कि अजगर / रूबी एक है बिखेरना समारोह - कैसे है कि ? कार्यान्वित)।
स्पष्टीकरण : पुस्तकालयों द्वारा, मेरा मतलब मानक जावा पुस्तकालयों से है। अन्य पुस्तकालयों के लिए, मैं उन्हें अन्य भाषाओं के साथ विचार करता हूं, और यह जानने के लिए दिलचस्पी रखता हूं कि वे कैसे लागू होते हैं।
EDIT टूलकिट ने एक समान प्रश्न का उल्लेख किया: जावा में लूप के लिए बढ़ाया का अंतिम पुनरावृत्ति
और दूसरा: क्या एक लूप में अंतिम तत्व एक अलग उपचार के लायक है?