假设我有一个“Shelf”类,每个“Shelf”都有多本“Book”。
现在假设我有一个方法返回一个包含若干书籍的
public class Shelf{
private String shelfCode;
private ArrayList<Book> books; //add getters, setters etc.
}
public class Book{
private String title;
}
现在假设我有一个方法返回一个包含若干书籍的
Shelf
列表。如何使用stream
将这些书籍全部收集到一个列表中?List<Shelf> shelves = new ArrayList<Shelf>();
Shelf s1 = new Shelf();
s1.add(new Book("book1"));
s1.add(new Book("book2"));
Shelf s2 = new Shelf();
s1.add(new Book("book3"));
s1.add(new Book("book4"));
shelves.add(s1);
shelves.add(s2);
List<Book> booksInLibrary = //??
我在考虑类似于
List<Book> booksInLibrary =
shelves.stream()
.map(s -> s.getBooks())
.forEach(booksInLibrary.addall(books));
但似乎它并不起作用,会抛出编译错误。
forEach()
时,请退一步并问自己,“这真的是最好的方法吗?”然后用“啊,当然不是”来回答自己。 - Kayamanmap
步骤来获取书架对象的书籍属性。 - Jeroen SteenbeekeflatMap(s -> s.getBooks().stream())
。 - Kayamanshelves.stream().map(Shelf::getBooks).flatMap(List::stream) .collect(Collectors.toList());
- Ousmane D.