Imprimir elemenos de um TreeMap

Pessoal, como eu faço pra imprimir (percorrer) todos os elementos de um TreeMap?
Soh pra complementar:
Eu tenho um TreeMap que eh formado de JInternalFrames e eh ordenado por uma String chamada id, onde esse id é um dos atributos de cada uma das JInternalFrames… cada vez q um JInternalFrame é aberto, ele é inserido nessa minha TreeMap. Pois be, como eu faço pra imprimir toda a minha TreeMap:
eu tô fazendo assim:

private Map<String, BottomFrame> seleciona = new TreeMap<String, BottomFrame>(); // onde BottomFrame são os meus JInternalFrames
public void imprimeSelecionados(){
        for(BottomFrame str : seleciona.values()){
         //Imprimindo os valores encontrados
           System.out.println(str);
        }
    }

Obrigada

Eis um exemplo achado na net, acho q vai te ajudar:

[code]public class TreeMapExample {

// This method prints all the mappings in the given TreeMap object.
public static void printTreeMap(TreeMap treeMap) {
    System.out.print( "TreeMap: " );
    
    // Use an Iterator to traverse the mappings in the TreeMap.  Note
    // that the mappings are in sorted order (with respect to the keys).
    Iterator iterator = treeMap.entrySet().iterator();
    
    while (iterator.hasNext()) {
        Map.Entry entry = (Map.Entry) iterator.next();
        System.out.print( "(" + entry.getKey() + ": " + 
                          entry.getValue() + "), " );
    }
    System.out.println();
}

[/code]

Fonte: http://logos.cs.uic.edu/Examples%20And%20Notes/examples/JavaStatic/Java/Java-Specific%20Programming%20Tasks/Java%20Collections%20Framework%20(lists,%20maps,%20…)/TreeMapExample.java

Não funcionou
ele sou imprime o primiro System
depois mais nada

Como vc esta fazendo? aqui tenho um treemap com username e session.

O codigo mudou soh um pouco, ficou assim:

[code]public void printTreeMap(Map<String, HttpSession> treemap) {
System.out.print( "TreeMap: " );

     // Use an Iterator to traverse the mappings in the TreeMap.  Note  
     // that the mappings are in sorted order (with respect to the keys).  
     Iterator iterator = treemap.entrySet().iterator();  
       
     while (iterator.hasNext()) {  
         Map.Entry entry = (Map.Entry) iterator.next();  
         System.out.print( "(" + entry.getKey() + ": " +   
                           entry.getValue() + "), " );  
     }  
     System.out.println();  
 }  [/code]

A declaração do meu Treemap:

private Map<String,HttpSession> logins  = new TreeMap<String,HttpSession>();

A chamada, sempre q eu adiciono alguém:

logins.put((String)event.getSession().getAttribute("nome_usuario"), event.getSession()); printTreeMap(logins);

A saída:

12:27:10,514 INFO [STDOUT] TreeMap: 12:27:10,514 INFO [STDOUT] (iferreira: org.apache.catalina.session.StandardSessionFacade@7cd5146d), 12:27:10,514 INFO [STDOUT] (sergio: org.apache.catalina.session.StandardSessionFacade@af094f2),

Funcionou sim! Obrigada!!!
O problema é q eu não estou conseguindo remover um elemento da minha treeMap…
:frowning:

Italons, por que você não está usando os generics no seu iterator? Dessa forma você está sendo obrigado a fazer casts.

O ideal é fazer algo assim:

[code]public void printTreeMap(Map<String, HttpSession> treemap) {
System.out.print( "TreeMap: " );

     // Use an Iterator to traverse the mappings in the TreeMap.  Note  
     // that the mappings are in sorted order (with respect to the keys).  
     Iterator<Map.Entry<String, HttpSession>> iterator = treemap.entrySet().iterator();  
       
     while (iterator.hasNext()) {  
         Map.Entry<String, HttpSession> entry = iterator.next();  
         System.out.print( "(" + entry.getKey() + ": " +   
                           entry.getValue() + "), " );  
     }  
     System.out.println();  
 }  [/code]

Assim o getKey() também retorna String e o getValue() retorna um HttpSession, sem nenhum cast e com type-safety garantida.

oitathi, o que você quer fazer exatamente?

Para remover um elemento do treeMap enquanto itera sobre ele, basta chamar o método remove() do Iterator.

Para só listar os elementos, é mais fácil usar o for each:

public void imprimeSelecionados(){ for(Map.Entry<String, BottomFrame> str : seleciona.entrySet()){ //Imprimindo os valores encontrados System.out.printf("%s=%s", str.getKey(), str.getValue().getTitle()); } }

oi Vini, vc pode por gentileza me dar um exepmlo de como usar o metodo remove iterando um TreeMap? Eh q estou com dificultade de fazer… queria um método q apartir da chave do tipo String passada como parametro para a função, um iterator fosse percorrendo o meu TreeMap e comprando as chaves do TreeMap com a que foi passada por parâmetro, aí, se ele encontrasse essa chave no map, ele removesse, entende?
Obrigada

Mas vc nao precisa percorrer o TreeMap para remover alguém dele. Basta dar remove e depois verificar se não é nulo. No meu exemplo aqui:

[code]HttpSession result = logins.remove((String)event.getSession().getAttribute(“nome_usuario”));

if(result != null){
logger.debug(“Usuario " + username + " removido do map.”);
}[/code]

E Vini, mto obrigado pela dica!!! :slight_smile:

desculpa, mas o q seria HttpSession?

Ué, por que você não usa só o método remove do Map?

seleciona.remove(chave);

Como o TreeMap não pode ter chaves duplicadas, não há porque usar o iterator.

Agora, vamos supor que você realmente queira remover todos os elementos que a chave comece com uma palavra qualquer. Nesse caso, você faria assim:

public void remover(String palavra) { //Obtém o iterador das chaves Iterator<String> it = seleciona.keySet().iterator(); while (it.hasNext()) { //Enquanto tivermos elementos para percorrer String chave = it.next(); //obtemos a chave if (chave.startsWith(palavra)) { //Testamos se queremos remover essa chave it.remove(); //Removemos esse elemento } } }