我应该如何以格式化的方式通过 toString 打印 ArrayList 中的所有元素?

How should I go about printing all elements in an ArrayList via a toString in a formatted manner?

我要问的是,在 Java 8 中,当我调用我的 toString() 方法(被覆盖)时,我试图打印出每个 ArrayList<String> 的元素以这种方式:

- str1
- str2
- str3

但是,当我 return ArrayList<String> 时,它以这种方式打印:

[str1, str2, str3]

我很清楚为什么它是这样打印的,但我不确定我将如何改变它在 toString() 中的显示方式。 请注意,这个 ArrayList<String> 的大小取决于它所属的对象,我宁愿不使用外部方法以这种方式打印出这些元素,除非没有其他方法可以做到这一点。

此外,我认为在 toString() 中使用 for 循环以上述方式打印出 ArrayList<String> 的元素甚至是没有意义的,我不认为Java 无论如何都会允许。

一个解决方案是编写自定义 List 实现来包装一个列表,然后覆盖 toString()。这似乎太过分了。相反,我建议在 Stream API:

的帮助下打印 List 的条目
list.forEach(entry -> System.out.println("- " + entry));

Ideone demo

随着新实例方法String::formatted(目前是预览功能)的出现,我们也可以编写

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

(抱歉,没有 Ideone 演示,Ideone 在 Java 12 上运行)

我只想创建另一种方法,如 displayArrayPretty(ArrayList arr) ,您可以在其中循环并打印您想要的方式。例如

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