Eu tinha uma variante ligeiramente diferente desse problema: era necessário associar dois valores diferentes à mesma chave. Apenas postando aqui no caso de ajudar outras pessoas, introduzi um HashMap como o valor:
/* @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 );
}
}
No código acima, a chave frameID é lida a partir da primeira string de um arquivo de entrada em cada linha, o valor para frameTypeHash é construído dividindo a linha restante e foi armazenado como objeto String originalmente, durante um período de tempo em que o arquivo começou a ter várias linhas ( com valores diferentes) associados à mesma chave frameID, então frameTypeHash foi sobrescrito com a última linha como valor. Substituí o objeto String por outro objeto HashMap como o campo de valor, o que ajudou a manter uma chave única para mapeamento de valor diferente.