Вы должны изменить свой метод getMode
, чтобы использовать исходную коллекцию elements
и вычислить режим.Одна из таких реализаций с использованием Java8 приведена ниже.
public E getMode() {
Map<E, Long> elementToCount = elements.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
return elementToCount.entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey)
.orElseThrow(IllegalArgumentException::new);
}
Еще один момент, на который следует обратить внимание, заключается в том, что вы использовали необработанные типы в своем основном методе.Предпочитайте универсальные типы необработанным типам, поскольку это обеспечивает безопасность типов времени компиляции.Я бы посоветовал вам изменить основной метод следующим образом, чтобы использовать универсальные типы.
public static void main(String[] args) {
String[] s = { "and", "an", "the", "my", "but", "may", "an", "the", "the" };
Integer[] x = { 1, 5, 9, 2, 4, 3, 7, 100, 2 };
ModeNMedianProblem<String> mn1 = new ModeNMedianProblem<>(s);
System.out.println("List: " + mn1.getSortedList());
System.out.println("Median: " + mn1.getMedian());
System.out.println("Mode: " + mn1.getMode());
ModeNMedianProblem<Integer> mn2 = new ModeNMedianProblem<>(x);
System.out.println("List: " + mn2.getSortedList());
System.out.println("Median: " + mn2.getMedian());
System.out.println("Mode: " + mn2.getMode());
}
После внесения предложенных изменений вы получите следующий результат.
List: [an, an, and, but, may, my, the, the, the]
Median: may
Mode: the
List: [1, 2, 2, 3, 4, 5, 7, 9, 100]
Median: 4
Mode: 2