У меня есть поток элементов, и я хочу преобразовать его в другой поток, который будет состоять только из элементов, которые больше всего отображались в предыдущем потоке, при условии, что у меня может быть несколько элементов с одинаковым числом вхождений.
Например:
Входной поток: ['A', 'B', 'A', 'B', 'C', 'C', 'A', 'B']
Выходной поток: ['A', B '], поскольку у них обоих максимальное количество вхождений в предыдущем потоке равно 3.
Пока что я написал следующий код:
stream.collect(toMap(w -> w, w -> 1, Integer::sum))
.entrySet()
.stream()
.max(comparing(Map.Entry::getValue))
.map(Map.Entry::getKey);
Но это позволяет мне получить только один из элементов с максимальным числом вхождений, и для приведенного выше случая это даст либо «A», либо «B».
Есть ли какой-нибудь элегантный способо том, как этого можно добиться с помощью лямбды?
Спасибо, ура