Вы можете использовать Stream.peek , чтобы распечатать список lastName
с author
с выше 50 лет age
следующим образом:
List<Book> library = List.of(new Book(new Author("overflow", 100)),
new Book(new Author("stack", 80)),
new Book(new Author("nullpointer", 49)));
// you were ignoring the result of collect
List<String> lastNames = library.stream()
.map(Book::getAuthor)
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.peek(System.out::println) // this would print "overflow" and "stack"
.collect(Collectors.toList());
Кроме того, обратите внимание, что если вы хотите просто напечатать имена, а не хранить их, вы можете просто использовать forEach
вместо collect
, обе они являются терминальными операциями, поскольку сбор данных имеет тип возврата, основанный на Тип потока в то время как forEach равен void : -
library.stream()
.map(Book::getAuthor)
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.forEach(System.out::println);
Все вышеперечисленное, учитывая, что используемые объекты похожи на следующие
class Book {
Author author;
Book(Author author) {
this.author = author;
}
// ... getters
}
class Author {
String lastName;
int age;
Author(String lastName, int age) {
this.lastName = lastName;
this.age = age;
}
// ... getters
}