2015-05-18 12 views
5

मेरे पास एक सूची है जिसमें मुझे अपनी सूची के सभी तत्वों में उपसर्ग जोड़ने की आवश्यकता है।कुशलता से सूची के सभी तत्वों को उपसर्ग कैसे जोड़ें?

नीचे जिस तरह से मैं सूची को पुन: स्थापित करके और फिर इसे जोड़कर कर रहा हूं। क्या ऐसा करने का कोई और बेहतर तरीका है? कोई भी दो लाइनर जो एक ही सामान कर सकता है?

private static final List<DataType> DATA_TYPE = getTypes(); 

public static LinkedList<String> getData(TypeFlow flow) { 
    LinkedList<String> paths = new LinkedList<String>(); 
    for (DataType current : DATA_TYPE) { 
     paths.add(flow.value() + current.value()); 
    } 
    return paths; 
} 

मैं LinkedList वापस जाने के लिए के बाद से मैं removeFirst तरह LinkedList वर्ग के कुछ तरीकों का उपयोग कर रहा हूँ की जरूरत है।

मैं अब जावा 7 पर हूं।

+0

'मानचित्र' के साथ जावा 8 स्ट्रीम का उपयोग करें। –

+0

दुर्भाग्यवश मैं जावा 7 का उपयोग कर रहा हूं। – user1950349

उत्तर

7

एक liners के लिए, जावा 8 स्ट्रीम का उपयोग करें:

List<String> paths = DATA_TYPE.stream().map(c -> flow.value() + c.value()).collect(Collectors.toList()); 

आप एक LinkedList का उत्पादन होगा, तो आप एक अलग कलेक्टर का उपयोग करना चाहिए।

+0

दुर्भाग्यवश मैं जावा 7 का उपयोग कर रहा हूं। – user1950349

+2

@ user1950349 जावा 7 में आपका कार्यान्वयन उतना छोटा दिखता है जितना हो सकता है। – Eran

3

आपका क्रियान्वयन ठीक लग रहा है, लेकिन अगर आप कुछ अलग करना चाहते हैं, इस प्रयास करें:

public static List<String> getData(final TypeFlow flow) { 
    return new AbstractList<String>() { 
     @Override 
     public String get(int index) { 
      return flow.value()+DATA_TYPE.get(index).value(); 
     } 

     @Override 
     public int size() { 
      return DATA_TYPE.size(); 
     } 
    }; 
} 

इस तरह आप एक "आभासी सूची" जो नहीं करता है वास्तव में डेटा होता है, लेकिन उड़ान भरने पर यह गणना करता है बनाएँ।

+0

यहां आपके संस्करण और मेरे संस्करण के बीच क्या अंतर है? आभासी सूची से आपका क्या मतलब है? – user1950349

+0

यह 20-30 बाइट्स की निरंतर राशि को छोड़कर अतिरिक्त मेमोरी नहीं लेता है। और जब तक आप इस सूची को घुमाने शुरू नहीं करते हैं तब तक यह कोई स्ट्रिंग कॉन्सटेनेशन नहीं करता है। आपका संस्करण सभी प्रीफिक्स्ड तारों को बनाता है और उन्हें अग्रिम में स्मृति में संग्रहीत करता है जो ओ (एन) addtional स्मृति लेता है जहां n 'DATA_TYPE' सूची आकार है। आपके मामले में शायद इससे कोई फर्क नहीं पड़ता है, लेकिन यदि आपके पास 'DATA_TYPE' में लाखों प्रविष्टियां हैं, तो स्मृति पदचिह्न महत्वपूर्ण रूप से भिन्न हो सकता है। –

+0

बहुत दिलचस्प कार्यान्वयन! – marcolopes

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