2016-01-13 13 views
5

में सूची में वहाँ पाश के लिए एक अन्य की तुलना में इस तरह के रूपांतरण के लिए एक सुविधाजनक तरीका इस तरह के परिवर्तित सूची <Map.Entry <Key, Value>> जावा

List<Map.Entry<String, Integer>> entryList = new List<>(//initialization); 
List<String>> keyList = new List<>(entryList.size()); 
for (Map.Entry<String, Integer> e : entryList) { 
    keyList.add(e.getKey()); 
} 

के रूप में मैं आदेश को संरक्षित किया जा और बताना चाहते हैं।

+1

जावा का कौन सा संस्करण? जावा 8 में एक स्ट्रीमिंग लाइब्रेरी है, इसलिए शायद –

+0

जावा 8 के साथ एक तरीका है। हाँ, मैं मानचित्र फ़ंक्शन के साथ खोज कर रहा हूं, लेकिन कोई रास्ता नहीं ढूंढ पाया है। –

+3

'entryList.stream()। नक्शा (मानचित्र। एंटीरी :: getKey) .collect (collect.toList()) 'वैसे भी, प्रश्न बनाये। – RAnders00

उत्तर

18

जावा का प्रयोग करें 8 धाराओं इस कन्वर्ट करने के लिए:

List<Map.Entry<String, ?>> entryList = new List<>(//initialization); 
List<String> stringList = entryList.stream().map(Entry::getKey).collect(Collectors.toList()); 

यह प्रविष्टियों की एक stream बना देता है, तो नक्शा विधि का उपयोग करता उन्हें तार को बदलने के लिए है, तो Collectors.toList() का उपयोग कर एक सूची में एकत्र करता है।

वैकल्पिक रूप से, इस विधि एक सहायक समारोह में बदला जा सकता है अगर आप इसे इस तरह से अधिक बार की जरूरत है:

public static <K> List<K> getKeys(List<Map.Entry<K,?>> entryList) { 
    return entryList.stream().map(Entry::getKey).collect(Collectors.toList()); 
} 

public static <V> List<V> getValues(List<Map.Entry<?,V>> entryList) { 
    return entryList.stream().map(Entry::getValue).collect(Collectors.toList()); 
} 

ऊपर कोड काम करता है, आप भी new ArrayList<>(map.keySet()) करके नक्शे से List<K> प्राप्त कर सकते हैं, इसके साथ आपको लाभ में entryset को किसी सूची में कनवर्ट करने की आवश्यकता नहीं है, और फिर एक सूची में फिर से वापस करने की आवश्यकता नहीं है।

+0

यह उत्तर कमाल है। qq: क्या सूची के रूप में दोनों कुंजी और मूल्य प्राप्त करने का कोई तरीका है? उदाहरण के लिए key_str = val_str प्रारूप। – Dany

+1

@danny सही प्रारूप को वापस करने के लिए मानचित्र ऑपरेशन बदलें: 'वापसी प्रविष्टिसूची। स्ट्रीम()। नक्शा (ई-> e.getKey() +" = "+ e.getValue())। (Collect.toList()); ' – Ferrybig

+0

यह एक आकर्षण की तरह काम करता है !! – Dany

1

यदि आपको वास्तव में सूची की एक प्रति बनाने की आवश्यकता नहीं है, तो आप इस तरह की सूची के चारों ओर एक रैपर को कार्यान्वित कर सकते हैं, जिसमें प्रविष्टि में किए गए आंशिक बोनस के साथ स्ट्रिंगलिस्ट में स्वचालित रूप से प्रतिबिंबित होता है। ध्यान रखें कि यह सरल रैपर केवल पढ़ा जाता है।

List<Map.Entry<String, ?>> entryList = new List<>(//initialization); 
List<String> stringList = new AbstractList<String>() { 
    List<Map.Entry<String, Integer>> internal = entryList; 

    public String get(int index) { 
     return internal.get(index).getKey(); 
    } 

    public int size() { 
     return internal.size(); 
    } 
}; 
संबंधित मुद्दे