Решал задачу через стримы и мапы. Решение в итоге прошло и все ок, но я думаю что можно сделать как то проще, у меня сделано через три стрима. Код прикреплять нельзя, потому я прикреплю немного ломанный код который не работает. // получаю мапу из коллекции байт которую я получил ранее и сразу суммирую количество вхождений Map<Integer, Integer> frequency = bytes .stream() .collect(Collectors.toMap()); // получаю ключ значение с максимальными повторениями Map.Entry<Integer, Integer> maxEntry = frequency.entrySet().stream() .max(comparingByValue()); // сопоставляю в потоке значения ключей в отсортированном массиве (можно и не сортировать :) ) frequency .entrySet() .stream() .sorted(comparingByValue().reversed()) .filter(e -> e.getValue() == maxEntry.getValue()) .forEach(k -> System.out.print(k.getKey() + " ")); // вопрос в следующем, я пытался реализовать такую логику в одном потоке, то есть 1. получаю мапу из массива байтов (тут получаю "ключ" : "количество вхождений ключа в коллекции") 2. Сортирую мапу по количеству вхождений ключей (тут получаю допустим { 90 - 4 ; 80 - 2 ; 12 - 1; 10 -1 } дальше я предполагаю получить максимальное значение (то есть 4) и сразу фильтровать поток как представлено в коде и отсекать пары у которых значения не равны максимальному (то есть 4) Как сделать проще ? (или как завернуть все в один поток) подскажите плез, четыре часа сижу уже)