public static <T> T findPrevailingElement( Stream<T> ids) { State s = new State (); // s.total is 0 Map<T, Long> counters = ids .peek(e -> ++s.total) .collect(Collectors.groupingBy( Function.identity(), <YOUR_INPUT>)); for (Entry<T, Long> element : counters.entrySet()) { if (element.getValue() >= (s.total + 1) / 2) { return element.getKey(); } } throw new IllegalStateException( "no element occurs more than 50"); }