Zamapuj na ciąg w Javie

88

Kiedy robię System.out.println(map)w Javie, otrzymuję niezły wynik w stdout. Jak mogę uzyskać tę samą reprezentację ciągu a Mapw zmiennej bez mieszania się w standardowe wyjście? Coś jak String mapAsString = Collections.toString(map)?

Dan
źródło

Odpowiedzi:

141

Użyj Object#toString().

String string = map.toString();

To przecież też to, co System.out.println(object)dzieje się pod maskami . Format map opisano w AbstractMap#toString().

Zwraca ciąg znaków reprezentujący tę mapę. Reprezentacja ciągu składa się z listy odwzorowań klucz-wartość w kolejności zwracanej przez entrySetiterator widoku mapy , ujętej w nawiasy klamrowe („{}”). Sąsiednie odwzorowania są oddzielone znakami „,” (przecinek i spacja). Każde mapowanie klucz-wartość jest renderowane jako klucz, po którym następuje znak równości („=”), po którym następuje skojarzona z nim wartość. Klucze i wartości są konwertowane na ciągi jak przez String.valueOf(Object).

BalusC
źródło
3
Naciśnięcie klawisza F3 w metodzie Map toString () jest mylące! Prowadzi prosto do Object.toString () - należy pomyśleć przed włączeniem F3
Adam
2
@Adam, to dlatego, że wywołujesz toString () w interfejsie, w którym ta metoda oczywiście nie jest zdefiniowana. Twoje IDE nie wie o rzeczywistej implementacji w czasie wykonywania. Nie powinieneś jej winić.
Victor Dombrovsky
@VictorDombrovsky Każde w połowie przyzwoite środowisko IDE (np. IntelliJ, Eclipse itp.) Powinno być w stanie wyśledzić rzeczywistą implementację metody zdefiniowanej w interfejsie.
Wheeler
@wheeler toString()nie jest zadeklarowany w, Mapa gdyby tak było: Mapma 21 klas implementujących. Który z nich powinien być preferowany nad innymi, gdy faktycznie używana implementacja jest znana tylko w czasie wykonywania?
Gerold Broser
Ale wartości kluczy nie są cudzysłowami podwójnymi, więc nie jest to prawidłowy kod JSON, jeśli ktoś spróbuje użyć go jako JSON
P Satish Patro
11

Możesz także użyć klasy Joiner kolekcji Google (guawa), jeśli chcesz dostosować format wydruku

Aravind Yarram
źródło