Tôi đã có một biến thể hơi khác của vấn đề này: Bắt buộc phải liên kết hai giá trị khác nhau với cùng một khóa. Chỉ đăng nó ở đây trong trường hợp nó giúp ích cho người khác, tôi đã giới thiệu HashMap như một giá trị:
/* @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 );
}
}
Trong đoạn mã trên, key frameID được đọc từ chuỗi đầu tiên của tệp đầu vào trong mỗi dòng, giá trị cho frameTypeHash được xây dựng bằng cách tách dòng còn lại và được lưu trữ dưới dạng đối tượng Chuỗi ban đầu, trong một khoảng thời gian tệp bắt đầu có nhiều dòng ( với các giá trị khác nhau) được liên kết với cùng một khóa frameID, vì vậy frameTypeHash đã được ghi đè bằng dòng cuối cùng làm giá trị. Tôi đã thay thế đối tượng String bằng một đối tượng HashMap khác làm trường giá trị, điều này giúp duy trì một khóa duy nhất để ánh xạ giá trị khác nhau.