Imprimir elemenos de um TreeMap

10 respostas
oitathi

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

10 Respostas

italons
Eis um exemplo achado na net, acho q vai te ajudar:
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();
    }

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

oitathi

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

italons

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

O codigo mudou soh um pouco, ficou assim:

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();  
     }

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),
oitathi

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

ViniGodoy

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:

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();  
     }

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

ViniGodoy

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()); } }

oitathi

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

italons

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:

HttpSession result = logins.remove((String)event.getSession().getAttribute("nome_usuario"));
			
if(result != null){
	logger.debug("Usuario " + username + " removido do map.");	
}

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

oitathi

desculpa, mas o q seria HttpSession?

ViniGodoy

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

Criado 3 de agosto de 2010
Ultima resposta 4 de ago. de 2010
Respostas 10
Participantes 3