Поток для сохранения в имени карты и количества объектов, подписанных этим именем - PullRequest
0 голосов
/ 19 мая 2018

У меня есть список объектов 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 голосов
/ 19 мая 2018

Чтобы завершить начатое, просто добавьте следующую операцию к операции map:

.collect(Collectors.groupingBy(Function.identity(), 
            Collectors.summingInt(e -> 1)));

Это даст Map<String, Integer>, как вы упомянули.

0 голосов
/ 19 мая 2018

Вы сделали наполовину: это фильтр вашей книги, который выдается, после чего вам нужно 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 тип для подсчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...