通用功能来打印对象列表

时间:2019-07-11 10:45:14

标签: java

在打印列表时,我不喜欢这种布局:它打印成一条长线。我更喜欢line pro元素。

我为此创建了一个版本,但想知道是否可以做得更好。

private static void printObjectList(List<?> objects) {
    System.out.println("[");
    objects.forEach(o -> System.out.println("    " + o));
    System.out.println("]");
}

----编辑
有了Erin的一个很好的技巧,我将方法更改为:

private static void printObjectList(List<?> objects) {
    System.out.println(objects.stream()
           .map(o -> "    " + o)
           .collect(Collectors.joining("    \n", "[\n", "\n]")));
}

我只是不了解参数。我希望:

           .collect(Collectors.joining("\n    ", "[", "\n]")));

----编辑
尚不完全正确,因为:

printObjectList(new ArrayList<Integer>());

给予:

[

]

代替:

[
]

----编辑
可以通过以下方式解决:

private static void printObjectList(List<?> objects) {
    if (objects.isEmpty()) {
        System.out.println("[\n]");
    } else {
        System.out.println(objects.stream()
                           .map(o -> "    " + o)
                           .collect(Collectors.joining("\n", "[\n", "\n]")));
    }
}

----编辑
应该多想一会儿。 :'-(我真的不喜欢if。通过重写映射并清空分隔符,不再需要有条件的条件:

private static void printObjectList(List<?> objects) {
    System.out.println(objects.stream()
                       .map(o -> "    " + o + "\n")
                       .collect(Collectors.joining("", "[\n", "]")));
}

1 个答案:

答案 0 :(得分:2)

您可以使用Java 8功能来代替编写自己的方法。

例如:

System.out.println(objects.stream().map(o -> "    " + o).collect(Collectors.joining ("   \n","[\n","\n]\n")));