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)?

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).


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.