Намиране на максималната/минималната стойност в масив от примитиви с помощта на Java

Тривиално е да се напише функция за определяне на минималната/максималната стойност в масив, например:

/**
 * 
 * @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;
}

но не е ли това вече направено някъде?

Решение

Използване на Commons Lang (за конвертиране) + Collections (за мин./макс.)

import java.util.Arrays;
import java.util.Collections;

import org.apache.commons.lang.ArrayUtils;

public class MinMaxValue {

    public static void main(String[] args) {
        char[] a = {'3', '5', '1', '4', '2'};

        List b = Arrays.asList(ArrayUtils.toObject(a));

        System.out.println(Collections.min(b));
        System.out.println(Collections.max(b));
   }
}

Обърнете внимание, че Arrays.asList() обвива основния масив, така че не трябва да отнема много памет и не трябва да извършва копиране на елементите на масива.

Коментари (3)

Да, това се прави в класа Collections. Имайте предвид, че ще трябва да преобразувате примитивния си масив от символи в Character[] ръчно.

Кратка демонстрация:

import java.util.*;

public class Main {

    public static Character[] convert(char[] chars) {
        Character[] copy = new Character[chars.length];
        for(int i = 0; i < copy.length; i++) {
            copy[i] = Character.valueOf(chars[i]);
        }
        return copy;
    }

    public static void main(String[] args) {
        char[] a = {'3', '5', '1', '4', '2'};
        Character[] b = convert(a);
        System.out.println(Collections.max(Arrays.asList(b)));
    }
}
Коментари (5)

Това е полезен клас, предоставящ min/max методи за примитивни типове: Primitives.java

Коментари (0)