A Map<key,value>
को a में बदलने का सबसे अच्छा तरीका क्या है List<value>
? बस सभी मूल्यों पर पुनरावृत्ति करें और उन्हें एक सूची में डालें या क्या मैं कुछ अनदेखी कर रहा हूं?
A Map<key,value>
को a में बदलने का सबसे अच्छा तरीका क्या है List<value>
? बस सभी मूल्यों पर पुनरावृत्ति करें और उन्हें एक सूची में डालें या क्या मैं कुछ अनदेखी कर रहा हूं?
जवाबों:
List<Value> list = new ArrayList<Value>(map.values());
यह सोचते हैं:
Map<Key,Value> map;
Collection
करने से मान रहा था List
।
keySet()
और values()
आम तौर पर ऐसी वस्तुएं होती हैं जो अंतर्निहित संरचना का एक सेट या संग्रह दृश्य keySet()
देती हैं ( रिटर्न सेट पर कोई प्रतिबंध नहीं है)। के लिए values()
, दी गई वस्तु एक हो सकती है List
, लेकिन अक्सर नहीं होगी। एक वास्तविक सूची बनाना, जैसा कि आप कहते हैं, लिंक को तोड़ देता है जिसका अर्थ है कि आप अब मूल मानचित्र पर निर्भर नहीं हैं। हालांकि कभी-कभी, आपको केवल एक सूची की आवश्यकता होती है क्योंकि कुछ एपीआई को एक की आवश्यकता होती है - नियम को मजबूत करने के लिए कि एक अच्छा एपीआई को केवल सबसे सार इंटरफेस की आवश्यकता होती है जो इसके साथ दूर हो सके ...
यहां मुद्दा यह है कि Map
दो मूल्य (एक कुंजी और मूल्य) हैं, जबकि List
केवल एक मूल्य (एक तत्व) है।
इसलिए, सबसे अच्छा जो किया जा सकता है वह या तो List
कुंजियों या मूल्यों को प्राप्त करना है। (जब तक हम कुंजी / मान युग्म पर पकड़ बनाने के लिए एक आवरण नहीं बनाते)।
कहें कि हमारे पास Map
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
एक के रूप में चाबियाँ List
एक नया बनाने के द्वारा प्राप्त किया जा सकता ArrayList
एक से Set
द्वारा दिया Map.keySet
विधि:
List<String> list = new ArrayList<String>(m.keySet());
जबकि एक मान के रूप में List
एक नई विधि ArrayList
से Collection
लौटाया जा सकता है Map.values
:
List<String> list = new ArrayList<String>(m.values());
List
चाबियाँ प्राप्त करने का परिणाम :
सेब एक और हैलो
List
मूल्यों को प्राप्त करने का परिणाम :
3.14 तत्त्व विश्व
HashMap
और समान अन-सॉर्ट Map
किए गए कार्यान्वयनों के लिए यह प्रभावी रूप से यादृच्छिक होगा।
जावा 8 स्ट्रीम एपीआई का उपयोग करना।
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()
आपको Map.Entry
कुंजी और मान दोनों युक्त वस्तुओं का संग्रह देता है । फिर आप इसे किसी भी संग्रह वस्तु में बदल सकते हैं जिसे आप पसंद करते हैं, जैसे new ArrayList(map.entrySet())
;
क्या की एक सूची?
मान लें map
कि आपका उदाहरण हैMap
map.values()
Collection
नक्शे के सभी मानों से युक्त होगा ।map.keySet()
Set
नक्शे की कुंजियों से युक्त सभी को लौटाएगा ।मुझे लगता है कि आप Map
एक में निहित मूल्यों को परिवर्तित करना चाहते हैं list
? सबसे आसान इंटरफ़ेस की values()
विधि को कॉल करना Map
है। इसमें Collection
सम्मिलित मूल्य वस्तुओं की वापसी होगी Map
।
ध्यान दें कि यह ऑब्जेक्ट Collection
द्वारा समर्थित है और Map
ऑब्जेक्ट में कोई भी परिवर्तन Map
यहां दिखाई देगा। इसलिए यदि आप चाहते हैं कि एक अलग कॉपी आपके Map
ऑब्जेक्ट के लिए बाध्य न हो , तो बस एक नई List
ऑब्जेक्ट बनाएं जैसा कि नीचे दिए गए ArrayList
मान से गुजर रहा है Collection
।
ArrayList<String> list = new ArrayList<String>(map.values());
आप इसे इस तरह से कर सकते हैं
List<Value> list = new ArrayList<Value>(map.values());
यदि आप परिणाम में मूल्यों को सुनिश्चित करना चाहते List<Value>
हैं Map<Key, Value>
, तो इनपुट के प्रमुख क्रम में हैं , आपको SortedMap
किसी भी तरह से "जाने" की आवश्यकता है ।
भी शुरू एक ठोस के साथ SortedMap
कार्यान्वयन (जैसे TreeMap
) या अपने इनपुट सम्मिलित Map
एक में SortedMap
है कि परिवर्तित करने से पहले List
। उदाहरण के लिए:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
अन्यथा आपको जो कुछ भी Map
लागू करने का मूल आदेश देने वाला मिलेगा , वह अक्सर प्राकृतिक कुंजी आदेश (प्रयास करें Hashtable
या ConcurrentHashMap
विविधता के लिए) के अलावा कुछ और हो सकता है ।
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
हमारे पास सूची में कुंजी और मूल्य जोड़ी दोनों हो सकते हैं। इसके अलावा मैप के उपयोग से कुंजी और मान प्राप्त कर सकते हैं। सूची में पुनरावृति करके।
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
यहाँ मानचित्र से मान प्राप्त करने की सामान्य विधि है।
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}