2012-05-16 8 views
5

मैं एककैसे प्रारंभ करने में एक सार्वजनिक स्थिर अंतिम केवल पढ़ने के लिए LinkedMap (bidirectionnal नक्शा)

public static final LinkedMap myMap; 

कहीं बनाने के लिए मैं मैप्स के लिए कुछ इसी तरह पाया चाहते हैं:

public class Test { 
     private static final Map<Integer, String> MY_MAP = createMap(); 

     private static Map<Integer, String> createMap() { 
      Map<Integer, String> result = new HashMap<Integer, String>(); 
      result.put(1, "one"); 
      result.put(2, "two"); 
      return Collections.unmodifiableMap(result); 
     } 
    } 

लेकिन मैं लागू नहीं कर सकते 'unmodifiableMap' इसे LinkedMap पर विधिबद्ध करें। कोई भी मेरी मदद कर सकता हैं? क्या यह सभी के लिए संभव है?

+1

'लिंक्ड मैप' क्या है? –

+1

क्या आपको 'लिंक्ड मैप' के लिए विशिष्ट विधियों की आवश्यकता है? अन्यथा बस 'मैप' –

+0

के रूप में myMap घोषित करें मुझे बोली-प्रक्रिया के कारण लिंकडैप की आवश्यकता है (मुझे यह उल्लेख करना चाहिए था कि यह commons.apache.org.collections से आता है)। – July

उत्तर

10

सबसे लोकप्रिय कामकाज लगभग निश्चित रूप से GuavaImmutableMap है। (प्रकटीकरण:। मैं अमरूद के लिए योगदान)

Map<Integer, String> map = ImmutableMap.of(
    1, "one", 
    2, "two"); 

या

ImmutableMap<Integer, String> map = ImmutableMap 
    .<Integer, String> builder() 
    .put(1, "one") 
    .put(2, "two") 
    .build(); 
अन्य पुस्तकालयों के बिना

, केवल एक ही आपके द्वारा लिखी गई अलावा अन्य वैकल्पिक हल

static final Map<Integer, String> CONSTANT_MAP; 
static { 
    Map<Integer, String> tmp = new LinkedHashMap<Integer, String>(); 
    tmp.put(1, "one"); 
    tmp.put(2, "two"); 
    CONSTANT_MAP = Collections.unmodifiableMap(tmp); 
} 
+0

इम्यूटेबल मैप बोली-प्रक्रिया प्रदान करता है? – July

+0

यदि आप बोली-प्रक्रिया चाहते हैं - और आपका मतलब है [जो मुझे लगता है कि आपका मतलब है] (http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#BiMap) "बिडरेक्शलिटी" द्वारा - फिर ['अपरिवर्तनीय BiMap '] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html) ऐसा करेंगे। –

+0

इसलिए, यदि मैं किसी निश्चित मूल्य की कुंजी को रीसेट कर दूंगा, तो मुझे पहले मानचित्र के विपरीत को पुनर्प्राप्त करना होगा, सही? – July

0

यह नहीं करता है 'है मुझे वैरिएबल घोषित करने के लिए कोई समझ नहीं है जो फ़ंक्शन के बराबर है()।

आप एक अंतिम चर की जरूरत है myMap आप की तरह लिखने के लिए है:

// = createMap(); 
private final static LinkedHashMap<Integer, String> 
              myMap = new LinkedHashMap<Integer, String>(); 
static { 
    myMap.put(1, "one"); 
    myMap.put(2, "Two"); 
}; 

public static void main(String[] args) { 

    for(String link : myMap.values()){ 
    System.out.println("Value in myMap: "+link); 
    } 

} 

या आप() फ़ंक्शन बनाने का उपयोग करना चाहते हैं, तो आप myMap से अंतिम कीवर्ड से छुटकारा पाने के लिए और मुख्य में myMap उपयोग करने के लिए जैसे:

public static void main(String[] args) { 

    myMap = Test.createMap(); 
संबंधित मुद्दे