我有一个名为“Book”的数据结构,其中包含以下字段:
public final class Book {
private final String title;
private final BookType bookType;
private final List<Author> authors;
}
我的目标是使用Stream API从List中推导出Map>。为了实现这个目标,首先我使用for-each循环澄清了解决方案的步骤,然后逐步采用基于流的方法重写它。
Map<Author, List<BookType>> authorListBookType = new HashMap<>();
books.stream().forEach(b -> b.getAuthors().stream().forEach(e -> {
if (authorListBookType.containsKey(e)) {
authorListBookType.get(e).add(b.getBookType());
} else {
authorListBookType.put(e, new ArrayList<>(Collections.singletonList(b.getBookType())));
}
}));
但这不是基于流API的解决方案,我遇到了困难,不知道如何正确地完成它。我知道我必须使用分组收集器从流中直接获得所需的Map>。 请给我一些提示,谢谢!
Map
的computeIfAbsent()
来替换if-then
。 - daniu