英文:
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
但是相反地,当我返回ArrayList<String>时,它以以下方式打印出来:
[str1,str2,str3]
我非常清楚为什么会以那种方式打印,但我不确定如何改变在toString()中的显示方式。
请注意,这个ArrayList<String>的大小因其所属对象的不同而异,并且我不愿意使用外部方法以这种方式打印这些元素,除非没有其他方法可行。
此外,在toString()内部使用for循环以前述方式打印ArrayList<String>的元素,我认为甚至没有意义,而且我认为Java也不会允许这样做。
英文:
What I am asking is that, in Java 8, when I call my toString() method (overridden), I am trying to print out the elements of each respective ArrayList<String> in this manner:
- str1
- str2
- str3
But instead, when I return the ArrayList<String>, it is printed in this manner:
[str1, str2, str3]
It makes perfect sense to me why it is printed that way, but I'm not sure how I would go about changing how it is displayed in the toString().
Note that this ArrayList<String> varies in size depending on the object of which it is apart of, and I would rather not use an external method to print these elements out in such a manner unless there was no other way to do it.
Furthermore, I don't think it even makes sense to have a for loop within a toString() printing out the elements of the ArrayList<String> in the aforementioned manner, and I don't think Java would allow that anyway.
答案1
得分: 1
一种解决方案是编写自定义的 List 实现,用于包装列表,然后重写 toString() 方法。这似乎有些过度设计。我建议使用 Stream API 来打印 List 的条目:
list.forEach(entry -> System.out.println("- " + entry));
随着新的实例方法 String::formatted(目前是预览功能)的推出,我们还可以这样编写:
list.stream()
    .map("- %s"::formatted)
    .forEach(System.out::println);
(抱歉,此示例没有 <kbd>Ideone 演示</kbd>,因为 Ideone 运行在 Java 12)
英文:
One solution would be to write a custom List-implementation to wrap a list in and then override toString(). This seems pretty overkill. Instead, I suggest printing the entries of the List with the help of the Stream API:
list.forEach(entry -> System.out.println("- " + entry));
With the advent of the new instance method String::formatted (currently a preview feature), we could also write
list.stream()
    .map("- %s"::formatted)
    .forEach(System.out::println);
(Sorry, no <kbd>Ideone demo</kbd> for this one, Ideone runs on Java 12)
答案2
得分: 0
我会创建另一个方法,类似于displayArrayPretty(ArrayList<String> arr),在这个方法中,您可以循环遍历数组并按您想要的格式打印。例如:
for (String str: arr) {
    System.out.println("- " + str);
}
英文:
I would just create another method like displayArrayPretty(ArrayList<String> arr) where you loop through and print how you want. Ex.
for (String str: arr) {
System.out.println("- " + str);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论