मेरे पास इस मुद्दे का थोड़ा अलग संस्करण था: एक ही कुंजी के साथ दो अलग-अलग मूल्यों को जोड़ना आवश्यक था। बस इसे यहाँ पोस्ट करने पर अगर यह दूसरों की मदद करता है, तो मैंने मूल्य के रूप में एक HashMap पेश किया है:
/* @param frameTypeHash: Key -> Integer (frameID), Value -> HashMap (innerMap)
@param innerMap: Key -> String (extIP), Value -> String
If the key exists, retrieve the stored HashMap innerMap
and put the constructed key, value pair
*/
if (frameTypeHash.containsKey(frameID)){
//Key exists, add the key/value to innerHashMap
HashMap innerMap = (HashMap)frameTypeHash.get(frameID);
innerMap.put(extIP, connName+":"+frameType+":"+interfaceName);
} else {
HashMap<String, String> innerMap = new HashMap<String, String>();
innerMap.put(extIP, connName+":"+frameType+":"+interfaceName);
// This means the key doesn't exists, adding it for the first time
frameTypeHash.put(frameID, innerMap );
}
}
उपरोक्त कोड में प्रत्येक पंक्ति में एक इनपुट फ़ाइल के पहले स्ट्रिंग से कुंजी फ़्रेमआईडी को पढ़ा जाता है, फ्रेम टाइपाइप के लिए मान शेष पंक्ति को विभाजित करके बनाया गया है और इसे मूल रूप से स्ट्रिंग ऑब्जेक्ट के रूप में संग्रहीत किया गया था, समय के साथ फ़ाइल में कई लाइनें होने लगीं अलग-अलग मूल्यों के साथ) एक ही फ्रेमआईडी कुंजी के साथ जुड़ा हुआ है, इसलिए फ्रेम टाइपाइप को मूल्य के रूप में अंतिम पंक्ति के साथ ओवरराइट किया गया था। मैंने स्ट्रिंग ऑब्जेक्ट को किसी अन्य हाशपॉइंट ऑब्जेक्ट के मान फ़ील्ड के रूप में बदल दिया, इससे एकल कुंजी को विभिन्न मूल्य मैपिंग को बनाए रखने में मदद मिली।