Como não consegui uma solução mais "automágica" criei um método pra fazer isso...
A idéia é pegar os Entry (conjunto de chave e valor) convertidos em Array, apartir dai, ordenar o array pelo valor do Entry e então recriar o Map, mas dessa vez eu precisaria utilizar o LinkedHashMap para manter a ordem em que os objetos ficaram após a ordenação dentro do array.
Claro que eu poderia retornar o Array ordenado... :D
Ah! Já ia me esquecendo, é necessário que o valor do hash implemente Comparable
Veja o código ilustrativo...
public static Map ordDesc(Map map) {
Object[] entries = map.entrySet().toArray();
Arrays.sort(entries, new Comparator() {
public int compare(Object lhs, Object rhs) {
Map.Entry le = (Map.Entry) lhs;
Map.Entry re = (Map.Entry) rhs;
return (
(Comparable) re.getValue()).compareTo(
(Comparable) le.getValue()
);
}
});
Map h = new LinkedHashMap();
for(int i =0; i < 10; i++){
Map.Entry entry = (Map.Entry)entries[i];
h.put(entry.getKey(), entry.getValue());
}
return h;
}
Nenhum comentário:
Postar um comentário