Я читаю Java 8 в действии, и автор говорит, что если у вас есть класс, который переопределяет метод toString, вам не нужно отображать поток в Strings при выполнении collect (joining ()).Пример:
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, возвращающий строку, вы получите тот же результат без необходимости отображатьисходный поток с функцией, извлекающей имя.
Когда каждый объект должен наследовать toString
от Object
?