2012-05-22 9 views
51

मेरे पास जावा में एक सरल पूर्णांक-टू-स्ट्रिंग मैपिंग है, लेकिन मुझे स्ट्रिंग से पूर्णांक को आसानी से पुनर्प्राप्त करने और स्ट्रिंग से पूर्णांक प्राप्त करने में सक्षम होना चाहिए।जावा में द्वि-दिशात्मक मानचित्र?

private static final Map<Integer, String> myMap = new HashMap<Integer, String>(); 
// This works one way: 
String myString = myMap.get(myInteger); 

// I would need something like: 
Integer myInteger = myMap.getKey(myString); 

वहाँ यह यह दोनों दिशाओं के लिए करने के लिए एक सही तरीका है: मैं मानचित्र की कोशिश की है, लेकिन यह पूर्णांक से केवल स्ट्रिंग प्राप्त कर सकते हैं, यह एक तरह से है?

एक अन्य समस्या यह है कि मैं केवल कुछ ही निरंतर मूल्यों कि 1->"low", 2->"mid", 3->"high" में परिवर्तन नहीं करते (है, तो यह एक जटिल समाधान के लिए जाने के लिए लायक नहीं होगा।

उत्तर

50

आपको लगता है कि के लिए गूगल संग्रह एपीआई का उपयोग कर सकते हैं हाल ही में, Guava नाम दिया विशेष रूप से एक BiMap

एक bimap (या "द्विदिश नक्शा") एक ऐसा नक्शा अपने मूल्यों की विशिष्टता को बरकरार रखता है इसकी कुंजी के रूप में भी है। इस बाधा का समर्थन करने के लिए सक्षम बनाता है bimaps एक "व्यस्त दृश्य", जो एक और bimapहैमें इस बिटमैप के समान प्रविष्टियां हैं लेकिन उलट कुंजी और मानों के साथ।

+0

http://stackoverflow.com/a/39329395/5466401 देखें –

16

जावा मानक API में कोई बिडरेक्शनल मानचित्र नहीं है। या तो आप अपने आप को दो मानचित्र बनाए रख सकते हैं या अपाचे संग्रह से BidiMap का उपयोग कर सकते हैं।

4

गूगल का प्रयोग के BiMap

यह अधिक सुविधाजनक है।

21

गुवा बायमैप बनाएं और उलटा मूल्य प्राप्त करना इतना छोटा नहीं है।

सरल उदाहरण:

import com.google.common.collect.BiMap; 
import com.google.common.collect.HashBiMap; 

public class BiMapTest { 

    public static void main(String[] args) { 

    BiMap<String, String> biMap = HashBiMap.create(); 

    biMap.put("k1", "v1"); 
    biMap.put("k2", "v2"); 

    System.out.println("k1 = " + biMap.get("k1")); 
    System.out.println("v2 = " + biMap.inverse().get("v2")); 
    } 
} 
5

आप दोनों कुंजी, मान युग्म और अपने नक्शे संरचना में उसके व्युत्क्रम डाल सकता है, लेकिन एक स्ट्रिंग के लिए पूर्णांक कन्वर्ट करने के लिए होगा:

map.put("theKey", "theValue"); 
map.put("theValue", "theKey"); 

का उपयोग करना map.get ("theValue") फिर "theey" वापस आ जाएगा।

यह एक त्वरित और गंदी तरह से है कि मैं लगातार नक्शे बनाया है, जो केवल कुछ चुनिंदा डेटासेट के लिए काम करता रहेगा:

  • शामिल केवल 1 1 के लिए जोड़े
  • मूल्यों के सेट से संबंध तोड़ना है कुंजी (1-> 2, 2-> 3 टूट जाता है यह)

आप <Integer, String> आप एक दूसरी <String, Integer> नक्शे बनाये रख सकता है रखने के लिए मूल्य "डाल" चाहते हैं के सेट -> कुंजी युग्म।

+5

तभी काम करता है अपने कुंजी और मान ही कर रहे हैं, या संभवतः यदि आप 'नक्शा <वस्तु, वस्तु> का उपयोग' – mlathe

+0

स्पष्टीकरण के लिए संपादित, धन्यवाद – Chicowitz

+0

इसके अलावा , सभी चाबियाँ और मान अलग होना चाहिए। –