Não sobrescrever um valor antigo no HashMap

Olá pessoal estou enfrentando um pequeno com HashMap , explicarei melhor com exemplo;

Estou importando um arquivo.txt de escalas do funcionário em dia , nessas escalas pode haver no mesmo dia a escala normal de trabalho mais treinamento , hora extra e etc:

ex:

Mat Data Inicio Fim Tipo
1779 11/12/2006 8:00 14:00 Normal
17179 11/12/2006 15:00 17:00 Extra

Acontece que programa foi definido que a chave do HashMap seria a data de trabalho o que acontece ele pega a primeira escala das 8:00 as 14:00 e armazena no hashMap , na proxima ele verifica que existe a 11/12/2006 e sobrescreve o horário tirando 8:00 as 14:00 para 15:00 as 17:00 isso gera falta e problemas para RH o problema que saída do arquivo deve ser exemplo acima para outro programa interpretar , ai esta um problema há um jeito em fazer um put no HashMap sem que ele não sobrescreva o valor antigo?

Pela doc do Java


Associates the specified value with the specified
key in this map. If the map previously contained a mapping for the key, the old value is replaced.

Não use hashmap :slight_smile:

O problema é senão usar HashMap , terei que alterar inúmeras classes e o tempo é pouquíssimo! :smiley:

Por que não muda a chave?

Porque não usar?

Concatena a mat+data+hora

Qual são as classes da chave e do valor dessa sua Map?

Cheque se a chave existe, antes de pôr um valor no mapa. Se existir, não ponha e ponto final.

Se não me engano você pode usar containsKey, ou então checar se get retorna null. Veja o JavaDoc ou use o recurso de autocomplete de sua IDE.

Resolvi meu problema mudando a chave:

Chave: tipodetrabalho+data

Thingol o programa já testa com containsKey se no HashMap há um Data , o cara que desenvolveu colocou como key a data de trabalho se ele achar a Key ele pula mas problema que em um dia a pessoa pode ter várias escalas e no final ele fazia:

Aqui ele sobrescrevia o valor antigo no HashMap
this.diasTrabalhados.put(diaTrabalhado.getData() , diaTrabalhado);

E na saida do arquivo saia com a ultima escala e desprezava anterior

Há possibilidade de ordenar um HaspMap por dois valores tipo um orderby do SQL :ORDERBY matricula , dataEntrada ?

Teria que jogar num TreeSet e usar compareTo?

Se você precisa de um Map ordenado (SortedMap), é melhor usar um TreeMap. Ele é um pouco mais lento (O(N log N) em vez de O(N)), mas muitas vezes compensa usar um SortedMap. (Eu mesmo uso mais SortedMap que HashMap, devido a essa propriedade de deixar os dados ordenados.)