Это тривиально написать функцию для определения минимального / максимального значения в массиве, например:
/**
*
* @param chars
* @return the max value in the array of chars
*/
private static int maxValue(char[] chars) {
int max = chars[0];
for (int ktr = 0; ktr < chars.length; ktr++) {
if (chars[ktr] > max) {
max = chars[ktr];
}
}
return max;
}
но разве это где-то уже не сделано?
java
arrays
algorithm
frameworks
Ник Хейнер
источник
источник
Collections.max(Arrays.asList())
.Ответы:
Использование Commons Lang (для конвертации) + Коллекции (в мин / макс)
Обратите внимание, что
Arrays.asList()
оборачивает базовый массив, поэтому он не должен занимать слишком много памяти и не должен выполнять копирование элементов массива.источник
ArrayUtils
Arrays.asList()
должно быть хорошо, ноArrayUtils.toObject()
будет копировать каждый элементa
в новый массивCharacter
.Arrays.asList(a)
не работает Вы не можете составить список примитивов (List<char>
в этом случае). Сначала вам нужно преобразовать примитивные значения в объекты, и именно поэтому ониArrayUtils.toObject
используются.Вы можете просто использовать новые Java 8
Stream
сек , но вы должны работать сint
.stream
Метод класса полезностиArrays
дает Вам ,IntStream
на котором вы можете использоватьmin
метод. Вы можете также сделатьmax
,sum
,average
, ...getAsInt
Метод используется для получения значения изOptionalInt
== UPDATE ==
Если время выполнения важно, и вы хотите просмотреть данные только один раз, вы можете использовать
summaryStatistics()
метод, подобный этомуЭтот подход может дать лучшую производительность, чем классический цикл, потому что
summaryStatistics
метод является операцией сокращения и допускает распараллеливание.источник
библиотеке Google Guava есть методы min и max в классах Chars, Ints, Longs и т. Д.
Так что вы можете просто использовать:
Никаких преобразований не требуется, и, по-видимому, они эффективно реализованы.
источник
Да, это сделано в классе Коллекции . Обратите внимание, что вам нужно будет преобразовать массив примитивных символов в Character [] вручную.
Короткая демонстрация:
источник
char []
в aCharacter []
только для определения максимума довольно неэффективно - лучше создать вспомогательный класс со статическими методами для каждого типа примитива, подобный следующемуjava.util.Arrays
: java.sun.com/javase/6/docs/api/java/util/Arrays.htmlCharacter.valueOf(chars[i])
вместоnew Character(chars[i])
соображений производительности: java.sun.com/javase/6/docs/api/java/lang/…источник
У меня есть небольшой вспомогательный класс во всех моих приложениях с такими методами:
источник
Вы можете легко сделать это с
IntStream
иmax()
методу.пример
объяснение
range(0, intArray.length)
- Чтобы получить поток с таким количеством элементов, сколько присутствует вintArray
.map(i -> intArray[i])
- Сопоставить каждый элемент потока с фактическим элементомintArray
.max()
- Получить максимальный элемент этого потока какOptionalInt
.getAsInt()
- РазверниOptionalInt
. (Вы также можете использовать здесь:,orElse(0)
на случай, еслиOptionalInt
пусто.)источник
Вот вспомогательный класс, предоставляющий
min/max
методы для примитивных типов: Primitives.javaисточник
источник
источник
int
но вопрос задает для примитивных значенийint, long, char, byte....
Решение с
reduce()
:В приведенном выше коде,
reduce()
возвращает данные вOptional
формате, который можно преобразовать вint
поgetAsInt()
.Если мы хотим сравнить максимальное значение с определенным числом, мы можем установить начальное значение в
reduce()
:В приведенном выше коде, когда
reduce()
в качестве первого параметра указан идентификатор (начальное значение), он возвращает данные в том же формате, что и идентификатор. С помощью этого свойства мы можем применить это решение к другим массивам:источник
Пример с плавающей точкой:
источник
Вот решение, чтобы получить максимальное значение примерно за 99% прогонов (измените 0,01, чтобы получить лучший результат):
(Не совсем серьезно)
источник
Передайте массив методу, который сортирует его,
Arrays.sort()
чтобы он только сортировал массив, который использует метод, затем устанавливает min вarray[0]
и max вarray[array.length-1]
.источник
Основной способ получить минимальное / максимальное значение массива. Если вам нужен несортированный массив, вы можете создать копию или передать ее методу, который возвращает мин или макс. Если нет, отсортированный массив лучше, так как в некоторых случаях он работает быстрее.
источник