Mapear para String em Java

88

Quando faço System.out.println(map)em Java, obtenho uma boa saída em stdout. Como posso obter essa mesma representação de string de um Mapem uma variável sem interferir na saída padrão? Algo assim String mapAsString = Collections.toString(map)?

Dan
fonte

Respostas:

141

Use Object#toString().

String string = map.toString();

Afinal, isso também é o que System.out.println(object)acontece nos bastidores . O formato dos mapas é descrito em AbstractMap#toString().

Retorna uma representação de string deste mapa. A representação da string consiste em uma lista de mapeamentos de valores-chave na ordem retornada pelo entrySetiterador da visualização do mapa , entre colchetes ("{}"). Os mapeamentos adjacentes são separados pelos caracteres "," (vírgula e espaço). Cada mapeamento de valor-chave é renderizado como a chave seguida por um sinal de igual ("=") seguido pelo valor associado. Chaves e valores são convertidos em strings como por String.valueOf(Object).

BalusC
fonte
3
Pressionar F3 no método Map toString () é enganoso! Leva você direto para Object.toString () - deve pensar antes de engajar F3
Adam
2
@Adam, isso porque você chama toString () na interface, onde esse método, é claro, não está definido. Seu IDE não sabe sobre a implementação real do tempo de execução. Você não deve culpá-la.
Victor Dombrovsky
@VictorDombrovsky Qualquer IDE decente (por exemplo, IntelliJ, Eclipse, etc.) deve ser capaz de rastrear a implementação real de um método definido em uma interface.
wheeler
@wheeler toString()não está declarado em Mape se fosse: Maptem 21 classes de implementação. Qual deles deve ser preferido em relação aos outros quando a implementação realmente usada só é conhecida em tempo de execução?
Gerold Broser
Mas os valores-chave não estão entre aspas, portanto, não é um JSON válido se alguém tentar usá-lo como JSON
P Satish Patro
11

Você também pode usar a classe Joiner do google-Collections (goiaba) se quiser personalizar o formato de impressão

Aravind Yarram
fonte