我应该如何以格式化的方式通过 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));
随着新实例方法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");
}
我要问的是,在 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));
随着新实例方法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");
}