Вопрос

Java Collections.max принимает только коллекцию сортируемых объектов.Однако, поскольку коллекция не обязательно отсортирована, я не вижу причин не реализовывать ту же функцию max для итерируемых типов.

Есть ли метод max для Iterable<T extends Comparable<? super T>> в стандартной библиотеке Java?

Это было полезно?

Решение

Collections.max была введена в 1.2. Iterable был введен в версии 1.5.

Редко иметь Iterable , который не является Collection . Если вы это сделаете, то это легко реализовать (будьте внимательны при чтении спецификации). Если вы считаете, что это действительно важно, вы можете отправить RFE на bugs.sun.com (или проголосовать, если он там уже есть).

Другие советы

Хотя Guava не является стандартной библиотекой Java, она достаточно близка к этому...

E com.google.common.collect.Ordering#max(Iterable<E> iterable)

например T max = Ordering.natural().max(myIterable);

Что касается того, почему стандартная библиотека не реализует это, это может быть потому, что Коллекция должна быть конечной, но Iterable не обязательно должен быть— и, возможно, следует никогда примите Iterable, если непрерывный Iterable приведет к вечному зацикливанию вашего кода.

Хм... нет, нет.Если вы хотите использовать Коллекции.макс() вам нужно конвертировать свой Итерируемый в Коллекция во-первых, вероятно, добавив все элементы в Список (или Набор, в зависимости от данных).

По определению элементы коллекции должны быть "сортируемыми" (в частности, они должны реализовывать Comparable ), так как для вычисления максимума должна быть возможность определить, больше ли один элемент, чем другой (что в точности означает Comparable).

Метод max () в классе Collections имеет, по сути, точную сигнатуру типа, которую вы разместили там, поэтому он должен соответствовать вашим целям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top