Я хочу напечатать Stack<Integer>
объект так же хорошо, как это делает отладчик Eclipse (то есть [1,2,3...]
), но печать с ним out = "output:" + stack
не возвращает этот хороший результат.
Просто чтобы уточнить, я говорю о встроенной коллекции Java, поэтому я не могу переопределить ее toString()
.
Как я могу получить хорошую версию стека для печати?
java
debugging
pretty-print
Элазар Лейбович
источник
источник
AbstractCollection@toString
(и, следовательноString + Stack
) уже печатает его так, как вы этого хотите.Ответы:
Вы можете преобразовать его в массив, а затем распечатать его с помощью
Arrays.toString(Object[])
:источник
stack.toArray()
может быть очень дорогим, процессор, время и память мудры. Решение, которое перебирает исходную коллекцию / повторяемость, вероятно, будет менее ресурсоемким.(Java 8)
источник
yourCollection.stream().map( o -> o.toString() ).collect( joining(",") ))
лучше, потому что вы читаете его слева направо, вам не нужно оглядываться назад, чтобы вычислить вС помощью потоков и сборщиков java 8 это можно сделать легко:
сначала мы используем
map
с,Object::toString
чтобы создать,Collection<String>
а затем используем объединяющий коллектор, чтобы соединить каждый элемент в коллекции с,
разделителем.источник
Collections.toString(stack)
было бы легко.Класс MapUtils, предлагаемый проектом Apache Commons, предлагает
MapUtils.debugPrint
метод, который будет красиво печатать вашу карту.источник
System.out.println (Коллекция c) уже печатает любой тип коллекции в удобочитаемом формате. Только если коллекция содержит определенные пользователем объекты, вам нужно реализовать toString () в определенном пользователем классе для отображения содержимого.
источник
Реализуйте toString () в классе.
Я рекомендую Apache Commons ToStringBuilder, чтобы сделать это проще. При этом вам просто нужно написать такой метод:
Для того, чтобы получить такой вывод:
Существует также рефлексивная реализация .
источник
Гуава выглядит как хороший вариант:
Iterables.toString(myIterable)
источник
Я согласен с приведенными выше комментариями о переопределении
toString()
ваших собственных классов (и об максимально возможной автоматизации этого процесса).Для классов, которые вы не определили, вы можете написать
ToStringHelper
класс с перегруженным методом для каждого библиотечного класса, который вы хотите обработать по своему вкусу:РЕДАКТИРОВАТЬ: Отвечая на комментарий xukxpvfzflbbld, вот возможная реализация для случаев, упомянутых ранее.
Это не полномасштабная реализация, а просто стартер.
источник
Вы можете использовать класс "Objects" из JAVA (который доступен с 1.7)
Выход: 1273, 123, 876, 897
Другая возможность - использовать класс «MoreObjects» из Google Guave , который предоставляет множество полезных вспомогательных функций:
Вывод: NameOfYourObject = [1273, 123, 876, 897]
Guava Docs
источник
Objects.toString()
просто призываетtoString()
коллекцию. В вашем примере это работает, потому что, предположительно,toString()
в коллекции на основе массива получается красиво печатать.С Apache Commons 3 вы хотите позвонить
источник
В Java8
или
источник
Просто изменил предыдущий пример для печати четной коллекции, содержащей определенные пользователем объекты.
источник
toString()
в наши дни большинство коллекций имеют полезную информацию в Java (Java7 / 8). Поэтому нет необходимости выполнять потоковые операции для объединения того, что вам нужно, просто переопределитеtoString
ваш класс значений в коллекции, и вы получите то, что вам нужно.и AbstractMap, и AbstractCollection реализуют toString (), вызывая toString для каждого элемента.
ниже тестовый класс, чтобы показать поведение.
источник
JSON
Альтернативным решением может быть преобразование вашей коллекции в формат JSON и печать Json-String. Преимущество - хорошо отформатированная и читаемая объектная строка без необходимости реализации
toString()
.Пример использования Google Gson :
источник
Если это ваш собственный класс коллекции, а не встроенный, вам необходимо переопределить его метод toString. Eclipse вызывает эту функцию для любых объектов, для которых она не имеет аппаратного форматирования.
источник
Будьте осторожны при вызове Sop на Collection, он может выдать
ConcurrentModification
Exception. Потому что внутреннийtoString
метод каждой коллекции внутренне вызываетIterator
коллекцию.источник
Должно работать на любую коллекцию, кроме
Map
, но ее также легко поддерживать. Измените код, чтобы передать эти 3 символа в качестве аргументов, если это необходимо.источник
Вы можете попробовать использовать
источник
Есть два способа упростить вашу работу. 1. импортировать библиотеку Gson. 2. использовать Ломбок.
Оба они помогают вам создать String из экземпляра объекта. Gson проанализирует ваш объект, lombok переопределит ваш метод класса объекта toString.
Я положил пример о Gson prettyPrint, я создаю вспомогательный класс для печати объекта и коллекции объектов. Если вы используете lombok, вы можете пометить свой класс как @ToString и напечатать свой объект напрямую.
}
источник