【发布时间】:2018-05-29 11:40:59
【问题描述】:
我正在阅读 java 8 in action,作者说如果你有一个覆盖 toString 方法的类,你不需要在做 collect(joining()) 时将流映射到 Strings。一个例子:
public static void main(String... args) {
List<Person> people =
Arrays.asList(
new Person(23, "Paul"),
new Person(23, "John"),
new Person(23, "Greg"),
new Person(24, "Greg"),
new Person(25, "Paul")
); // Person overrides toString
String peopleString = people
.stream()
.collect(Collectors.joining());
System.out.println(peopleString);
}
但是,这不起作用,只有这个:
String peopleString = people
.stream()
.map(Person::toString)
.collect(Collectors.joining());
有效,那么这本书是错的吗?此外,他为什么说(我稍微改变了措辞):
另请注意,如果一个类有一个 toString 方法返回一个字符串,您将获得相同的结果,而无需使用提取名称的函数映射原始流。
什么时候每个对象都应该从Object继承toString?
【问题讨论】:
-
你不需要在
Person对象中创建一个方法toString()? -
你在哪一页看到的?
-
@YCF_L 似乎在页面
166:章节6.2.3. Joining Strings。菜单示例... -
@MarkoPacak 自己读了这句话,可能是作者所指的
joining的定义非常古老,类似于public static Collector<?, ?, String>,内部称为@987654331 @... -
@MarkoPacak 如果您认为即使是功能接口在一开始就有不同的名称,那也不是真的......
标签: java java-8 java-stream