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;
}