Bom dia pessoal!
Estou fazendo um pequeno programa de registros em uma agenda e gostaria de saber se existe algum método na coleção TreeMap que me retorne o próximo e o elemento anterior. Tipo, é uma TreeMap de valores <String1, String2) onde String1 é o nome da pessoa que foi inserida e String2 é o toString da classe contendo todos os dados. Na agenda clico no botão próximo e queria que me retornasse a próxima pessoa em ordem alfabética(já que TreeMap insere ordenado). Tem como??
O valor anterior pode ser obtido chamando-se o método headMap, e se este retornar um mapa não-vazio, use lastKey.
O próximo valor pode ser obtido chamando-se o método tailMap (que deve retornar os valores maiores ou iguais ao valor passado), e você deve pegar então o segundo elemento (ande sobre o mapa com um Iterator.).
J
JoAuM
Ele retorno “os valores maiores”, não tem como pegar somento “o” próximo??
Valeu!!
T
thingol
Puxa, a partir do Java 6.0 dá para fazer o que você quer. Não tinha visto a interface “NavigableSet”.
Vou fazer um exemplo e já posto logo.
T
thingol
importjava.util.*;classTesteTreeMap{publicstaticvoidmain(String[]args){SortedMap<String,String>politicos=newTreeMap<String,String>();politicos.put("Lula","presidente");politicos.put("Serra","governador");politicos.put("Kassab","prefeito");politicos.put("Marta","candidata");System.out.println("Lista de politicos: "+politicos);// Vamos listar o politico que vem antes de KassabStringantes=((NavigableSet<String>)politicos.keySet()).lower("Kassab");System.out.println(antes);// deve imprimir "null" pois ele é o primeiro do treemap// Vamos listar o politico que vem antes de Lulaantes=((NavigableSet<String>)politicos.keySet()).lower("Lula");System.out.println(antes);// deve imprimir "Kassab"// Vamos listar o politico que vem depois de Marta Stringdepois=((NavigableSet<String>)politicos.keySet()).higher("Marta");System.out.println(depois);// deve imprimir "Serra"// Vamos listar o politico que vem depois de Serra depois=((NavigableSet<String>)politicos.keySet()).higher("Serra");System.out.println(depois);// deve imprimir "null" porque ele é o último do treemap}}
J
JoAuM
Muito obrigado thingol.
Vou implementar aqui e depois posto se consegui! :lol:
Um abraço.
João
J
JoAuM
Está quase pronto aqui mas, como seria para eu pegar o próximo do lula mas retornando o seu cargo(presidente, governador…)?
Obrigado!!
T
thingol
Use o método “get” da interface Map, como você provavelmente deve já estar usando.
J
JoAuM
Muito obrigado thingol!
O que você me passou era exatamente o que eu precisava, agora só falta minha lógica funcionar! :lol:
Obrigado!!!
Joao
J
JoAuM
Thingol, você sabe se existe outro tipo de comando que não seja este Navigable para fazer a mesma coisa? Aqui na empresa utilizamos java 5 esse método não é aceito! Tem como?
Um abraço
T
thingol
A minha primeira resposta indica o que deve ser feito com Java 5 ou anterior.
J
JoAuM
Nunca mexi com Iterator! Sabe algum material que possa me ajudar?
Fiz uma POG aqui e deu certo… Vou tentar encurtar o código agora! Valeu!