我有一个对象列表Book:
class Book{
Boolean state;
String reader;
}
我需要一个流,它会将Map<String, Integer>
读者保存为读者持有的书籍的关键和数量。 State
表示目前是否借出了图书。
我从这样的事情开始:
Map<String, Integer> readers = bookRepository.getAllBooks().stream()
.filter(Book::getState)
.map(Book::getLastReader)
但我不知道如何完成它。
答案 0 :(得分:2)
你已经完成了一半:这是过滤你借书的书,之后你需要groupingBy
:
// Need to import static Collectors.groupingBy, Collectors.counting
Map<String, Long> readers = bookRepository.getAllBooks().stream()
.filter(Book::getState)
.collect(groupingBy(Book::getReader, counting()));
请注意:groupingBy
返回Long
类型进行计数。
答案 1 :(得分:0)
要完成您已经开始的操作,只需将以下操作链接到map
操作:
.collect(Collectors.groupingBy(Function.identity(),
Collectors.summingInt(e -> 1)));
如您所述,这将产生Map<String, Integer>
。