Сопоставить со строкой в ​​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 реализующий класс. Какой из них следует предпочесть другим, если фактически используемая реализация известна только во время выполнения?
Герольд Брозер,

Но значения ключей не заключаются в двойные кавычки, следовательно, не является допустимым JSON, если кто-то пытается использовать его как JSON
P Satish Patro,

11

Вы также можете использовать класс Google-collections (guava) Joiner, если хотите настроить формат печати

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.