Collections.max функция для повторяемого <Integer>в Java - PullRequest
6 голосов
/ 14 января 2009

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

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

Ответы [ 4 ]

14 голосов
/ 06 апреля 2011

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

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

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

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

5 голосов
/ 14 января 2009

Collections.max была введена в 1.2. Iterable было введено в 1,5.

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

0 голосов
/ 14 января 2009

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

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

0 голосов
/ 14 января 2009

Хм ... нет, нет. Если вы хотите использовать Collections.max () , вам нужно сначала преобразовать Iterable в Collection , возможно, добавив все элементы в Список (или Установить , в зависимости от данных).

...