Ajuda com TreeMap

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??

Um abraço!
Joao

http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html

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.).

Ele retorno “os valores maiores”, não tem como pegar somento “o” próximo??
Valeu!!

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.

import java.util.*;

class TesteTreeMap {
    public static void main (String[] args) {
        SortedMap<String,String> politicos = new TreeMap<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 Kassab
        String antes = ((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 Lula
        antes = ((NavigableSet<String>)politicos.keySet()).lower ("Lula");
        System.out.println (antes); // deve imprimir "Kassab"
        // Vamos listar o politico que vem depois de Marta   
        String depois = ((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
    }
}

Muito obrigado thingol.
Vou implementar aqui e depois posto se consegui! :lol:

Um abraço.
João

Está quase pronto aqui mas, como seria para eu pegar o próximo do lula mas retornando o seu cargo(presidente, governador…)?

Obrigado!!

Use o método “get” da interface Map, como você provavelmente deve já estar usando.

Muito obrigado thingol!
O que você me passou era exatamente o que eu precisava, agora só falta minha lógica funcionar! :lol:

Obrigado!!!

Joao

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

A minha primeira resposta indica o que deve ser feito com Java 5 ou anterior.

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!