Senhores eu tenho esse trecho de código que faz o seguinte:
1 - verifica se já existe no map a chave “MES/ANO”
2 - coloca o registro no seu respectivo mes ano
Por isso eu disse que você teria que implementar o seu próprio Comparator.
Se você depender unicamente do comparador de Strings, não dá certo mesmo.
Um comparator mais correto seria:
[code]
class DataComparator implements Comparator
{
public int compare(String o1, String o2) {
String[] diaEMes1 = o1.split("/");
String[] diaEMes2 = o2.split("/");
int mes1 = Integer.parseInt(diaEMes1[0]);
int ano1 = Integer.parseInt(diaEMes1[1]);
int mes2 = Integer.parseInt(diaEMes2[0]);
int ano2 = Integer.parseInt(diaEMes2[1]);
int compare = ano1 - ano2; //Começamos pelo ano
if (compare != 0)
return compare;
return mes1 - mes2; //E se o ano for igual, comparamos o mês
}
}[/code]
Daí vc cria o seu TreeMap usando esse comparator.
Map<String, List> map = new TreeMap<String, List>(new DateStringComparator());
Outra alternativa criar uma classe, comparable, que represente o mês e o dia. E então usar ela de chave no seu mapa.
A vantagem é que, se você precisar mudar o formato da data, a ordem dos registros, ou mesmo incluir informação adicional na chave, pode fazer apenas mudando a classe MesAno. Isso também evita os parseInts e um comparator muito complexo.
Conforme sugere o Joshua Bloch no livro Effective Java, a classe String só deve ser usada para valores que representam texto. No caso, a sua chave é um valor que presenta uma data no formato MesEAno. Por isso, é melhor criar uma classe separada. Ela pode provar ser muito mais útil com o passar do tempo.
amigo… essa da classe mes ano é bem legal…
desculpe-me pelo desconhecimento e me diga: preciso fazer algo mais do que implementar a classe e popular o map. porque continua botando o 10 na frente do 1 o resto está ordenando corretamento ex. 02/2007 - 03/2007 …
Estranho, será que o seu componente que está gerando o gráfico não está fazendo caquinha?
Teste se seu mapa está ordenado fazendo um println nas chaves.
Se o mapa estiver errado, então deve ser um problema com o Comparator.
Se estiver certo é o componente do relatório que tá fazendo caca…
olá,
tenho um HashMap<Character, Integer>
queria uma maneira de saber qual chave tem o menor valor, para depois excluí-la,
usei o TreeMap, mas ele ordena tudo doido.
tem como ele ordenar pelos valores? ou tenho de implementar esse Coparator?
outra dúvida, achei uma classe PriorityQueue, que é uma fila que ordena pelo menor. consegui usá-la com array, mas não consegui com o meu HashMap, não teria como eu usar o hashMap nessa classe?