2012-12-08 24 views
10

मैं एक का उपयोग मामला है जहाँ मैं Vector तत्वों से अधिक पुनरावृति और कहते हैं सरणी में परिणाम की दुकान ही अगर है कि उदाहरण के वर्ग के है methodजावा में वेक्टर पर पुनरावृत्ति कैसे करें और केवल निर्दिष्ट कक्षा को स्टोर करें?

वहाँ यह करने के लिए किसी भी आसान कर रहे हैं की जरूरत है?

वर्तमान में मैं इस तरह से कर रहा हूँ:

Iterator itr = vec.iterator(); 
    Iterator element = vec.iterator(); 

    while(itr.hasNext()) 
    { 
     boolean method = itr.next() instanceof Method; 
     if(method) 
      System.out.println("\t" + ((Method)(element.next())).name); 
     else 
      element.next(); 
    } 

लेकिन मुझे लगता है इस की तुलना में कुछ बेहतर तरीका होगा।

List<Method> list = new ArrayList<Method>(); 
    for (Object obj : vector) { 
     if (obj instanceof Method) { 
      list.add(obj); 
     } 
    } 
+2

आपका बूलियन मान लागू करके किया जा सकता 'विधि' और 'विधि' नामक एक वर्ग बेहद भ्रमित है। कक्षा के नाम ** हमेशा ** अपरकेस शुरू करना चाहिए। –

+0

'विधि' विरोधाभासी चीजें हैं –

+0

इस दृष्टिकोण में क्या समस्या है? आपको अमरूद जैसे बाहरी पुस्तकालय का उपयोग किए बिना कोई अन्य रास्ता नहीं मिलेगा। (नोट: अन्य भाग को हटाया जाना चाहिए, हालांकि) –

उत्तर

16

मान लें कि एक वर्ग Method है, तो कोड कुछ की तरह हो सकता है?

यदि vector थ्रेड-सीमित नहीं है, तो इसकी सामग्री को संशोधित करने वाले किसी अन्य थ्रेड की उपस्थिति में, प्रत्येक-पुनरावृत्ति ConcurrentModificationException फेंक सकती है।

4

तुल्यकालन के बिना वेक्टर पुनरावृत्ति के बारे में चिंतित किसी को भी नहीं था:

0

जावा 8 में, आप .stream() विधि है कि वेक्टर तत्वों की एक धारा रिटर्न आह्वान कर सकते हैं, इसलिए तत्वों, एक सूची में भंडारण के उदाहरण के लिए, एक कलेक्टर

Vector<String> vec = new Vector<>(); 
vec.add("hello"); 
vec.add("world"); 

List<String> list = vec.stream().collect(Collectors.toList());