2013-09-24 6 views
19

कोड:Guava MultiMap मानों में डुप्लिकेट को कैसे खत्म करें?

Multimap<String, String> myMultimap = ArrayListMultimap.create(); 
    myMultimap.put("12345", "qwer"); 
    myMultimap.put("12345", "abcd"); 
    myMultimap.put("12345", "qwer"); 
    System.out.println(myMultimap); 

परिणाम:

{12345=[qwer, abcd, qwer]} 

क्या यह संभव है डुप्लिकेट "Qwer" को खत्म करने के लिए? धन्यवाद।

उत्तर

29

उपयोग SetMultimap कार्यान्वयन में से एक है, उदाहरण के HashMultimap के लिए:

SetMultimap<String, String> myMultimap = HashMultimap.create(); 
myMultimap.put("12345", "qwer"); 
myMultimap.put("12345", "abcd"); 
myMultimap.put("12345", "qwer"); 
System.out.println(myMultimap); // {12345=[abcd, qwer]} 
+3

दस्तावेज़ स्थिति के रूप में, एक योजना के संदर्भ में मल्टीमैप को कभी-कभी सबिनटरफेस में से किसी एक पर प्राथमिकता दी जाती है, क्योंकि संग्रह के संदर्भ सेट, सूची इत्यादि पर शायद ही कभी पसंद किए जाते हैं। असाइनमेंट का एलएचएस सेटमैल्टिमैप होना चाहिए। – gk5885

+1

@ gk5885 अच्छा बिंदु, कोड अद्यतन। – gustafc

12

ListMultimap जैसे ArrayListMultimap डुप्लिकेट कुंजी-मूल्य जोड़े की अनुमति देता है। SetMultimap जैसे HashMultimap या TreeMultimap के कार्यान्वयन का प्रयास करें।

+1

@StormeHawke सिवाय इसके कि यह कम पठनीय होगा। – gustafc

+2

@StormeHawke मुझे इसे पढ़ने पर झपकी नहीं है, लेकिन यह सुनिश्चित करने में दर्द होता है। बात यह है कि, जब आप इस कोड को बनाए रखने के लिए एक साल बाद वापस आते हैं, तो आपको यह पता लगाना होगा कि यह विशेष पहिया कैसे पुनर्निर्मित किया गया था। इसमें कोई मूल्य वाले कुंजियों के लिए खाली सेट होंगे? यदि हां, तो * सभी * अपेक्षित कुंजी के लिए खाली मूल्य हैं, या केवल कुछ के लिए? क्या मूल्यों के बीच शून्य होगी? और फिर आप एक स्पष्ट रूप से परिभाषित अनुबंध और मंशा के साथ संग्रह का उपयोग न करने के लिए मूल लेखक को शाप देना शुरू करते हैं ("अरे, मुझे पिछले!"), यानी multimap। – gustafc

0

ऐसा करने के कई तरीके हैं। सबसे आसान SetMultimap का उपयोग करना होगा।

आपके दिए गए उदाहरण के साथ एक जेडीके केवल समाधान हालांकि Map<String, Set<String>> का उपयोग करना होगा, जिसमें अद्वितीय मानों के Set का एक अनन्य कुंजी होगा।

Map<String, Set<String>> map = new HashMap<String, Set<String>>(); 

का उपयोग कर कि आप बाहर पुस्तकालयों से डेटा संरचनाओं में लाने के लिए नहीं है, आप सख्ती से जावा मुख्य लाइब्रेरीज का उपयोग कर रहे का लाभ।

+1

सादा जावा समाधान देखने के लिए खुश। –

+0

@ सिल्वीउ बुर्सिया 'मल्टीमैप के पास उनकी जगह है, लेकिन उनके अनुभव में उनकी आवश्यकता बहुत दुर्लभ है ... मुझे कभी भी प्रोग्रामिंग करने के लिए किसी भी समय उपयोग करने की आवश्यकता नहीं है – StormeHawke

+1

मुझे लगता है कि सभी Google समूह डॉन मेरे शुद्ध जावा समाधान की तरह नहीं ... केवल एक कारण है कि मैं पूरी तरह से वैध उत्तर – StormeHawke

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