Estou cursando Java na facul e estou precisando ordenar um HashMap que contém String nas chaves (K) e um objeto que guarda dados dessa chave no campo valores (V), por meio de atributos.
Alguém tem uma ideia? Pensei em usar um TreeMap como estrutura auxiliar, no qual insiro um atributo único do objeto que está em V como chave no TreeMap e o mesmo objeto completo como valor em V, por meio de um for - mas não sei quais métodos usar.
Obs.: Posso trocar de HashMap para outro mapa, porém tem que ser mapa
Se puder dar um exemplo dos dados que quer guardar e em qual ordem eles devem estar, ficaria mais fácil entender.
De qualquer forma, o TreeMap já é um mapa que é ordernado pela key. Se quer ordernar pela key, nao precisa dele como estrutura auxiliar, use ele diretamente.
G
gamerGordinho
Obrigado pela sua resposta, Abel.
O meu grande problema é que eu tenho que guardar várias informações por entrada de mapa.
Por exemplo: meuHashMap.put(“TimeDeFutebol”, new criaTime(1, 2, 3));
onde 1, 2, 3 são dados integer que correspondem a vitorias, empates e ranking.
quero, agora, ordenar esse mapa colocando o atributo ranking como chave no treemap para obter a ordenação automatica e o objeto gerado pelo criaTime no campo de valor do TreeMap.
Grande abraço e obrigado!
R
rmendes081 like
Por definição, um HashMap não tem ordenação, você tem que usar um TreeMap mesmo. Por ser uma árvore, o TreeMap mantém as chaves ordenadas independentemente da ordem em que você as insere.
G
gamerGordinho
Show mendes, muito obrigado. Então acho que o TreeMap será uma boa estrutura auxiliar pra ordenar meu mapa, abc
J
jonathan.sky
também é possivel implementar a interface comparator em seu objeto, para que ele possa avaliar as prioridades de organização.
modelo
classCompareimplementsComparator<CustomObject>{Map<CustomObject,Integer>map;/** * Constructs our map * @param map map to be sorted. */publicCompare(Map<CustomObject,Integer>map){this.map=map;}/** * Performs the comparison between two entries. */publicintcompare(CustomObjectleft,CustomObjectright){returnmap.get(left).compareTo(map.get(right));}
}
Assim ela saberá como ordenar, sem a necessidade de usar o TreeMa, porém levara algum custo para entender a interface.
G
gamerGordinho2 likes
Valeu Jonathan, confesso que vai levar um tempinho pra entender seu code rs. Bom eu fiz assim (ainda não testei):
while (condição) {
meuTreeMap.put (time.rank, time);
}
Os cálculos para decidir o rank de cada time são feitos antes de inserir no TreeMap. Foi mal mas como to aprendendo vou sempre escolher o code mais simples abc e obg!
J
jonathan.sky
Quando ver conceitos de interface ficará mais claro, mas tiro o chapéu por esta implementando API avançadas, digo em meu curso, não se passaram do arraylist. TT haha, Bora o/
G
gamerGordinho
Show de bola bro, super obrigado! Vou caçando aqui como vou entregar essa avaliação, abc e obg!