Galera eu gostaria de saber como ordenar (crescente e !crescente) uma
TreeMap <Integer,Objeto>
no caso o objeto vai ser uma classe que vai ter 2 atributos: nome String: , valor double . Eu gostaria de ordenar esse TreeMap
pelo atributo valor da classe objeto.
com um TreeMap você não pode, não estou dizendo que é impossivel mas isso desafia a especificação do SortedMap
http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html
The map is ordered according to the natural ordering of its keys, or by a Comparator typically provided at sorted map creation time.
TreeMap
ordena suas entradas pela ordenação natural das chaves.
No seu caso essas chaves são do tipo Integer
.
Você até pode fornecer um Comparator
para o TreeMap
, mas esse Comparator
só vai servir para comparar as chaves.
Se essas chaves correspondem à índices, então recomendo utilizar List
ao invés de TreeMap
.
Com List
você pode definir os comparadores abaixo:
static final Comparator<Objeto> ASCENDENTE = new Comparator<Objeto>() {
@Override
public int compare(Objeto a, Objeto b) {
return (int) (a.getValor() - b.getValor());
}
};
static final Comparator<Objeto> DESCENDENTE = new Comparator<Objeto>() {
@Override
public int compare(Objeto a, Objeto b) {
return (int) (b.getValor() - a.getValor());
}
};
E ordenar assim:
// ordenação ascendente
Collections.sort(objetos, ASCENDENTE);
ou assim:
// ordenação decendente
Collections.sort(objetos, DESCENDENTE);
Muito Obrigado a todos que ajudaram, então eu precisaria usar o TreeMap mesmo porque o professor queria que tudo tivesse log(N) e com lista não daria certo. Pesquisei para caralho e todas as funçoes que achei faziam praticamente a mesma coisa , transformava em Uma Collections da vida e ordenadava.