Encontrar o valor máximo/minuto em uma série de primitivos usando Java

É trivial escrever uma função para determinar o valor min/max em um array, como por exemplo:

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

mas isto já não é'isto não é feito em algum lugar?

Solução

Usando Commons Lang (para converter) + Colecções (para min/max)

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));
   }
}

Note que Arrays.asList() envolve o array subjacente, portanto não deve ser muito intensiva em memória e não deve realizar uma cópia nos elementos do array.

Comentários (3)

Sim, it's feito na classe Collections. Note que você precisará converter sua matriz de caracteres primitivos para um Character[] manualmente.

Uma pequena demonstração:

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)));
    }
}
Comentários (5)

Aqui's uma classe utilitária que fornece métodos min/max para tipos primitivos: Primitives.java

Comentários (0)