2012-08-31 19 views
11

संशोधित मानचित्रों की स्थिर प्रारंभिकता का सबसे अच्छा तरीका क्या है? मुझे केवलGoogle संग्रह में मानचित्रों की स्थैतिक प्रारंभिकता का सर्वोत्तम तरीका

ImmutableMap.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) 

इस तरह से अपरिवर्तनीय मानचित्र बनाया गया और इसमें पैरामीटर की निश्चित सूची शामिल है।

+0

संबंधित - http://stackoverflow.com/questions/5947869/like-immutablemap-of-for-hashmap-in-maps – Premraj

उत्तर

20

आप एक of कोड फैशन चाहते हैं, तो आप इस्तेमाल कर सकते हैं:

myMap = Maps.newHashMap(new ImmutableMap.Builder<K, V>() 
        .put(k1, v1) //One k-v pair 
        .putAll(otherMap) //From other Map 
        .put(Maps.immutableEntry(k2, v3)) //From a Map Entry 
        ... 
        .build()); 

प्लस::

myMap = Maps.newHashMap(ImmutableMap.of(k1, v1, k2, v2...)); 

इसके अलावा, ImmutableMap.Builder जटिल स्रोत से एक नक्शा बनाने के लिए अन्य विकल्प है मेरे कोड ImmutableMap का मूल इरादा नहीं है। अगर नावा गुवा पुस्तकालय का उपयोग करने पर जोर देता है;)

+0

हालांकि, कचरा निर्माण के मोर्चे पर यह थोड़ा अपर्याप्त है। पहले मामले में, जब भी आप 'हैश मैप' बनाना चाहते हैं, तो आप एक अस्थायी 'अपरिवर्तनीय मैप' बनाते हैं, और दूसरे मामले में, आप एक 'इमटेबल मैप.बिल्डर' (जिसमें एक परिवर्तनीय 'मानचित्र') होता है, जो तब बनाता है आखिरकार 'हैश मैप' बनाने से पहले 'इमटेबल मैप' ... –

+0

@ फ्रैंकपावेजौ हां, आप सही हैं। मेरा कोड ImmutableMap का मूल इरादा नहीं है। मेरा मतलब है कि अगर नावा गुवा पुस्तकालय का उपयोग करने पर जोर देता है;) –

3

आपको वास्तव में स्थिर प्रारंभिकरण की आवश्यकता नहीं है। निम्नलिखित में क्या गलत है?

Map<K, V> map = Maps.newHashMap(); 
map.put(k1, v1); 
map.put(k2, v2); 
// More put() calls 

// map is now ready to use. 

आप यदि आवश्यक हो तो इसके चारों ओर एक सहायक विधि बना सकते हैं, लेकिन आप केवल (1 प्रविष्टि, 2 प्रविष्टियों, आदि के लिए) बहुत से अलग संस्करण बना सकते हैं। किसी बिंदु पर यह अब और मदद नहीं कर रहा है।

+0

यह सही है लेकिन शायद कुछ सौंदर्य तरीका मौजूद है?)) – Nawa

+0

अच्छा, नहीं। या तो आप 'मैप' के साथ प्रत्येक प्रविष्टि के लिए एक स्थिर विधि लिखते हैं, या आप 'ऑब्जेक्ट []' या 'ऑब्जेक्ट ...' को पैरामीटर के रूप में लेते हुए एक स्थिर विधि लिखते हैं और सुनिश्चित करते हैं कि इसकी लंबाई एक है 2 में से एकाधिक (प्रविष्टियों की पूर्णांक संख्या प्राप्त करने के लिए), लेकिन फिर आप किसी भी प्रकार की जांच खो देते हैं। मैं 'put()' के अनुक्रम के साथ छड़ी कहता हूं। –

3

यह परिवर्तनीय संग्रह के लिए कोई बात नहीं है। एकमात्र कारण यह है कि मैं सोच सकता हूं कि प्रारंभिक रूप से छोटे म्यूटेबल मानचित्र बनाते समय आप इसके लिए एक शॉर्टेंड चाहते हैं। अपनी खुद की उपयोगिता तरीकों लिखें यदि आप इस शांत अक्सर की जरूरत है:

public static <K,V> HashMap<K,V> newHashMap(K k1, V v1) { 
    HashMap<K, V> map = new HashMap<>(); 
    map.put(k1, v1); 
    return map; 
} 

public static <K,V> HashMap<K,V> newHashMap(K k1, V v1, K k2, V v2) { 
    HashMap<K, V> map = new HashMap<>(); 
    map.put(k1, v1); 
    map.put(k2, v2); 
    return map; 
} 

... 

यह अवहेलना जब तक आपको लगता है कि यह अभी भी पठनीय है। कुंजी और मूल्यों से मिश्रण के कारण यह मेरी राय में अपठनीय तेज़ हो जाता है - यहां तक ​​कि उचित स्वरूपण के साथ भी। अमरूद लोगों ने इसे 5 कुंजी-मूल्य जोड़े पर रोक दिया जो बहुत अधिक इमो है।

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