流以保存地图名称和使用该名称签名的对象的数量

时间:2018-05-19 13:57:51

标签: java dictionary java-stream

我有一个对象列表Book:

class Book{
Boolean state; 
String reader;
}

我需要一个流,它会将Map<String, Integer>读者保存为读者持有的书籍的关键和数量。 State表示目前是否借出了图书。 我从这样的事情开始:

Map<String, Integer> readers = bookRepository.getAllBooks().stream()
            .filter(Book::getState)
            .map(Book::getLastReader)

但我不知道如何完成它。

2 个答案:

答案 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>