gpt4 book ai didi

java - 使用 Stream api 聚合嵌套列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:25 25 4
gpt4 key购买 nike

假设我有一个 Shelf 类,每个 Shelf 都有多个 Book

public class Shelf{
private String shelfCode;
private ArrayList<Book> books; //add getters, setters etc.
}

public class Book{
private String title;
}

现在,假设通过某种方法我有一个 ListShelf,每个都包含一些书。如何使用 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));

但是好像不行,报编译错误。

最佳答案

你可以为此使用flatMap

shelves.stream()
.flatMap(s -> s.getBooks().stream())
.collect(Collectors.toList());

流处理过程非常简单:s -> s.getBooks().stream() 为每个书架上的每本书创建一个流,flatMap 将所有内容展平,并且 collect(Collectors.toList()) 将结果存储在列表中。

关于java - 使用 Stream api 聚合嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49423841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com