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:
privateMap<String,BottomFrame>seleciona=newTreeMap<String,BottomFrame>();// onde BottomFrame são os meus JInternalFramespublicvoidimprimeSelecionados(){for(BottomFramestr:seleciona.values()){//Imprimindo os valores encontradosSystem.out.println(str);}}
Eis um exemplo achado na net, acho q vai te ajudar:
publicclassTreeMapExample{// This method prints all the mappings in the given TreeMap object.publicstaticvoidprintTreeMap(TreeMaptreeMap){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).Iteratoriterator=treeMap.entrySet().iterator();while(iterator.hasNext()){Map.Entryentry=(Map.Entry)iterator.next();System.out.print("("+entry.getKey()+": "+entry.getValue()+"), ");}System.out.println();}
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:
publicvoidprintTreeMap(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). Iteratoriterator=treemap.entrySet().iterator();while(iterator.hasNext()){Map.Entryentry=(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>();
Funcionou sim! Obrigada!!!
O problema é q eu não estou conseguindo remover um elemento da minha treeMap…
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:
publicvoidprintTreeMap(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
}
}
}