Карта до рядка на Java


88

Коли я працюю System.out.println(map)на Java, я отримую хороший результат у stdout. Як я можу отримати те саме подання рядка a Mapу змінній, не втручаючись у стандартний вивід? Щось на зразок String mapAsString = Collections.toString(map)?

Відповіді:


141

Використовуйте Object#toString().

String string = map.toString();

Це врешті-решт і те, що System.out.println(object)робиться під капотами . Формат карт описаний у AbstractMap#toString().

Повертає рядкове представлення цієї карти. Представлення рядка складається зі списку зіставлення ключів і значень у порядку, що повертається entrySetітератором подання карти , укладеним у фігурні дужки ("{}"). Сусідні відображення відокремлюються символами "," (кома та пробіл). Кожне відображення ключ-значення відображається як ключ, за яким слідує знак рівності ("="), а потім пов'язане значення. Клавіші та значення перетворюються у рядки як String.valueOf(Object).


3
Натискання клавіші F3 на методі Map toString () вводить в оману! Ви потрапите прямо до Object.toString () - слід подумати перед тим, як задіяти F3
Адам

2
@Adam, це тому, що ти викликаєш toString () на інтерфейсі, де цей метод, звичайно, не визначений. Ваш IDE не знає про фактичну реалізацію часу виконання. Не слід її звинувачувати.
Віктор Домбровський

@VictorDombrovsky Будь-яка напівпристойна IDE (наприклад, IntelliJ, Eclipse тощо) повинна мати можливість відстежувати фактичну реалізацію методу, визначеного в інтерфейсі.
Wheeler

@wheeler toString()не оголошено в, Mapі якби це було: Mapмає 21 клас реалізації. Якому з них слід віддати перевагу над іншими, коли реалізація, що фактично використовувалася, відома лише під час виконання?
Gerold Broser

Але ключові значення не подвійні лапки, отже, не дійсний JSON, якщо хтось намагається використовувати його як JSON
P Satish Patro

11

Ви також можете використовувати клас google-collection (guava) Joiner, якщо хочете налаштувати формат друку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.