Поскольку вы хотите получить результат как Map<String, Long>
, вы не должны отображаться на ключ ввода, т. Е. .map(Map.Entry::getKey)
, поскольку мы также не должны собирать данные в список, т. Е. .collect(toList())
, поскольку в конечном итоге вы в конечном итоге получите с List<String>
вместо Map<String, Long>
, скорее после сортировки по указанным критериям, вы должны собрать на карту и, в частности, LinkedHashMap
:
Map<String, Long> result = employees.stream()
.collect(Collectors.groupingBy(p -> p.getFirstName(),
Collectors.counting()))
.entrySet().stream()
.sorted(Map.Entry.<String, Long> comparingByKey())
.limit(20)
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(l,r) -> l,
LinkedHashMap::new));
Компаратор, приведенный выше, будет сортировать только по ключам, поскольку это то, что, по-видимому, и предполагает ваш ожидаемый результат.
Обратите внимание, что если вам не нужна операция limit
после группировки, ее можно упростить до:
employees.stream()
.sorted(Comparator.comparing(Employee::getFirstName))
.collect(Collectors.groupingBy(Employee::getFirstName,
LinkedHashMap::new,
Collectors.counting()));