Карта до рядка на 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.