如何 toString() 像这样的列表:List<Option>?
How to toString() a List like this one : List<Option>?
假设我有一个名为 Option
的对象的 list
:
List<Option> opts = ArrayList<Option>();
我已覆盖对象 Option
toString()
。
当我执行 opts.toString()
时,这意味着我对 List 执行 toString ,我得到一些不必要的逗号 ,。
我想改变这一点。拜托,有没有比在 List 中循环到 toString 每个元素更好的方法?希望我清楚。
我想覆盖 ArrayList
的 toString
不是个好主意,但您可以在应用程序的某些实用程序 class 中创建自己的打印函数:
public static String myToString(List<?> list) {
StringBuilder stringList = new StringBuilder();
String delimiter = " ";
for (int c = 0; c < list.size(); c++) {
stringList.append(delimiter);
stringList.append(list.get(c));
}
return stringList.toString();
}
如果您使用的是 Java 8 Optional,它将如下所示:
List<Optional<String>> opts = Arrays.asList(
Optional.of("bli"),
Optional.<String>empty(),
Optional.of("bla"));
String result = opts.stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.joining(", "));
导致 "bli, bla" 没有任何额外的逗号。
如果您不能使用官方 Optional
class,您可以更改您的 Option
以实现类似的行为吗?
顺便说一句:有了 Java 9,您甚至可以用 flatMap(Optional::stream)
.
代替笨拙的 filter(Optional::isPresent).map(Optional::get)
如果您希望将字符串表示粘合在一起,您可以使用
opts.stream().map(Object::toString).collect(Collectors.joining()));
但如果您只想去掉逗号,即保留 space 作为分隔符,您可以将其自定义为
opts.stream().map(Object::toString).collect(Collectors.joining(" ")));
或者,如果您担心 过时的 分隔符,即您不希望空字符串之间有分隔符,请使用
opts.stream().map(Object::toString)
.filter(s->!s.isEmpty()).collect(Collectors.joining(" "))
如果您错过了方括号,请使用
opts.stream().map(Object::toString).collect(Collectors.joining(" ", "[", "]"))
或
opts.stream().map(Object::toString)
.filter(s->!s.isEmpty()).collect(Collectors.joining(" ", "[", "]"))
假设我有一个名为 Option
的对象的 list
:
List<Option> opts = ArrayList<Option>();
我已覆盖对象 Option
toString()
。
当我执行 opts.toString()
时,这意味着我对 List 执行 toString ,我得到一些不必要的逗号 ,。
我想改变这一点。拜托,有没有比在 List 中循环到 toString 每个元素更好的方法?希望我清楚。
我想覆盖 ArrayList
的 toString
不是个好主意,但您可以在应用程序的某些实用程序 class 中创建自己的打印函数:
public static String myToString(List<?> list) {
StringBuilder stringList = new StringBuilder();
String delimiter = " ";
for (int c = 0; c < list.size(); c++) {
stringList.append(delimiter);
stringList.append(list.get(c));
}
return stringList.toString();
}
如果您使用的是 Java 8 Optional,它将如下所示:
List<Optional<String>> opts = Arrays.asList(
Optional.of("bli"),
Optional.<String>empty(),
Optional.of("bla"));
String result = opts.stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.joining(", "));
导致 "bli, bla" 没有任何额外的逗号。
如果您不能使用官方 Optional
class,您可以更改您的 Option
以实现类似的行为吗?
顺便说一句:有了 Java 9,您甚至可以用 flatMap(Optional::stream)
.
filter(Optional::isPresent).map(Optional::get)
如果您希望将字符串表示粘合在一起,您可以使用
opts.stream().map(Object::toString).collect(Collectors.joining()));
但如果您只想去掉逗号,即保留 space 作为分隔符,您可以将其自定义为
opts.stream().map(Object::toString).collect(Collectors.joining(" ")));
或者,如果您担心 过时的 分隔符,即您不希望空字符串之间有分隔符,请使用
opts.stream().map(Object::toString)
.filter(s->!s.isEmpty()).collect(Collectors.joining(" "))
如果您错过了方括号,请使用
opts.stream().map(Object::toString).collect(Collectors.joining(" ", "[", "]"))
或
opts.stream().map(Object::toString)
.filter(s->!s.isEmpty()).collect(Collectors.joining(" ", "[", "]"))