Как мне следует печатать все элементы в ArrayList через toString в форматированном виде?

#java #eclipse #arraylist #tostring

#java #eclipse #arraylist #tostring

Вопрос:

Я спрашиваю, что в Java 8, когда я вызываю свой toString() метод (переопределенный), я пытаюсь распечатать элементы каждого соответствующего ArrayList<String> таким образом:

 - str1
- str2
- str3
  

Но вместо этого, когда я возвращаю ArrayList<String> , он печатается таким образом:

 [str1, str2, str3]
  

Для меня имеет смысл, почему он печатается таким образом, но я не уверен, как бы я изменил способ его отображения в toString() .
Обратите внимание, что это ArrayList<String> зависит от размера в зависимости от объекта, от которого он отделен, и я бы предпочел не использовать внешний метод для печати этих элементов таким образом, если только не было другого способа сделать это.

Кроме того, я не думаю, что даже имеет смысл иметь цикл for внутри toString() распечатки элементов ArrayList<String> вышеупомянутым способом, и я не думаю, что Java в любом случае позволит это.

Комментарии:

1. вы также можете посмотреть Collectors.joining , как создать строковое представление потокового

Ответ №1:

Одним из решений было бы написать пользовательскую List реализацию для переноса списка и последующего переопределения toString() . Это кажется довольно излишним. Вместо этого я предлагаю распечатать записи List с помощью Stream API:

 list.forEach(entry -> System.out.println("- "   entry));
  

Ideone demo

С появлением нового метода экземпляра String::formatted (в настоящее время функция предварительного просмотра) мы могли бы также написать

 list.stream()
    .map("- %s"::formatted)
    .forEach(System.out::println);
  

(Извините, Ideone demoдля этого нет, Ideone работает на Java 12)

Ответ №2:

Я бы просто создал другой метод, такой как displayArrayPretty(ArrayList arr), где вы перебираете и печатаете, как хотите. Например.

 for (String str: arr) {
System.out.println("- "   str);
}
  

Комментарии:

1. "n" Приводит к двойным пустым строкам.