Cod*_*Man 2 java java-8 java-stream
我正在阅读java 8,并且作者说如果你有一个覆盖toString方法的类,那么在进行collect(joined())时你不需要将流映射到字符串.一个例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,只有这样:
String peopleString = people
.stream()
.map(Person::toString)
.collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)
工作,所以这本书错了吗?此外,为什么他说(我改变了一点措辞):
另请注意,如果某个类有一个toString方法返回一个字符串,您将获得相同的结果,而无需使用提取名称的函数映射原始流.
当每个对象应该继承toString的Object?
无论这本书说错了,你的解释是对的(除非这一点完全不同,你没有得到它)
people.stream()
Run Code Online (Sandbox Code Playgroud)
会产生一个Stream<People>,同时Collectors.joining有一个定义:
public static Collector<CharSequence, ?, String> joining()
Run Code Online (Sandbox Code Playgroud)
显然这不能工作,因为Person它不是一个实例CharSequence.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |