В вашем коде есть две проблемы:
Метод Comparable::compareTo
не возвращает boolean
, но int
. Вот описание метода:
Сравнивает два аргумента для порядка. Возвращает отрицательное целое число, ноль или положительное целое число, поскольку первый аргумент меньше, равен или больше второго. В вышеприведенном описании обозначение sgn (выражение) обозначает математическую функцию signum, которая определена для возврата одного из -1, 0 или 1 в зависимости от того, является ли значение выражения отрицательным, нулевым или положительным.
Вы не можете создать экземпляр объекта c, например new E()
. Отметьте Тип экземпляра генериков в java.
Это способ go:
public static <E extends Comparable<E>> E getMaxElement(E[][] list) {
E theMaximumElement = list[0][0]; // initial value (the first one)
for (final E[] array : list) {
for (final E e : array) {
if (theMaximumElement.compareTo(e) < 0) // comparison is against 0
theMaximumElement = e; // setting the new maximum value
}
}
return theMaximumElement; // returning it
}
Единственное условие заключается в том, что элемент list[0][0]
существует, то есть массивы не пусты. В противном случае вам следует изменить решение для использования Optional<E>
, поскольку максимум не всегда найден (пустые массивы).
Начиная с Java 8, существует простой способ обработки таких случаев использования с помощью java -stream :
Optional<E> optionalmaximum = Arrays.stream(list) // Stream<E[]>
.flatMap(Arrays::stream) // Stream<E>
.max(Comparator.naturalOrder()); // Optional<E>