【发布时间】:2020-09-17 16:22:20
【问题描述】:
我有以下对象:
public class Book {
private Long id;
private Long bookId;
private String bookName;
private String owner;
}
基本上,一本书可以由多个所有者拥有,即所有者“a”拥有图书 1 和 2。
我有一个基本函数,当传递一个书本对象时,它会在一个列表中给出它的所有者。
private List<String> getBookToOwner(Book book) {
List<String> a = new ArrayList<>();
if (book.getOwner() != null && !book.getOwner().isEmpty()) {
a.addAll(Arrays.asList(book.getOwner().split("/")));
}
return a;
}
我想用它来应用到每本书,检索它们的所有者并创建以下地图。
Map<String, List<Long>> ownerToBookMap;
像这样:
如何在此处使用流?
//books is List<Book>
Map<String, List<Long>> ownerToBookMap = books.stream().map(
// apply the above function to get its owners, flatten it and finally collect it to get the above Map object
// Need some help here..
);
【问题讨论】:
-
只是一个建议:不要在单个列中包含多个值(在您的情况下为所有者列)。因此,要修复它,我建议您与 Owner 表创建多对多关系。在这种情况下,将创建一个中间映射表。在线查看更多详细信息。
标签: java-8 java-stream collect