Boa noite pessoal…
É o seguinte, tenho um HashMap<String, String> e gostaria de saber como eu faço para fazer uma estrutura de repetição para todos os elementos dessa coleção mais ou menos assim:
Lê a chave, coloca numa String.
Lê o valor, coloca numa outra String.
Muito obrigado, mas surgiu outra dúvida agora, olha:
publicstaticvoidescreverGlossario(HashMap<String,String>glossario,Stringconceito,Stringsignificado){Stringtemp="";Stringlinha;try{FileWriterfw=newFileWriter("glossario.txt");PrintWriterpw=newPrintWriter(fw);if(glossario.containsKey(conceito)){JOptionPane.showMessageDialog(null,"Esse conceito já existe.");}else{for(Map.Entry<String,String>entry:glossario.entrySet()){temp=String.format("%s\n%s:%s",temp,entry.getKey(),entry.getValue());}linha=String.format("%s\n%s:%s",temp,conceito,significado);pw.printf("%s\n%s",temp,linha);JOptionPane.showMessageDialog(null,"Conceito inserido com sucesso.");}pw.close();}catch(Exceptione){JOptionPane.showMessageDialog(null,"Ocorreu um erro do tipo:"+e+"");}
Eu precisava que isso aí salva-se um arquivo no bloco de notas assim:
E eliminaria as variáveis temporárias, deixaria o código mais claro, evitaria aquela concatenão implícita usando o próprio temp no String.format e ainda usaria o println() do próprio PrintWriter, que com certeza gera o caracter de quebra de linha correto.
ViniGodoy
Ah, e não se esqueça de fechar o seu pw e seu fw num bloco finally. Senão eles podem ficar abertos caso uma exceção ocorra:
publicstaticvoidescreverGlossario(Map<String,String>glossario,Stringconceito,Stringsignificado){try{FileWriterfw=null;PrintWriterpw=null;try{fw=newFileWriter("glossario.txt");pw=newPrintWriter(fw);if(glossario.containsKey(conceito)){JOptionPane.showMessageDialog(null,"Esse conceito já existe.");return;}for(Map.Entry<String,String>entry:glossario.entrySet()){pw.printf("%s:%s",entry.getKey(),entry.getValue());pw.println();}pw.printf("%s:%s",conceito,significado);JOptionPane.showMessageDialog(null,"Conceito inserido com sucesso.");}finally{if(pw!=null){pw.close();}if(fw!=null){fw.close();}}}catch(Exceptione){JOptionPane.showMessageDialog(null,"Ocorreu um erro do tipo:"+e+"");}}
PS: Alterei o tipo de entrada da função de HashMap para Map. Assim você pode receber também um TreeMap, e imprimir as chaves de maneira ordenada. :)
Tente sempre usar as classes das collections através da sua interface, nunca através de sua classe mais específica.
M
malsan
É uma ótima prática, realmente! Reduz o acoplamento, tornando o seu código menos específico, logo mais reutilizável!!!