Εύρεση της τιμής max/min σε έναν πίνακα από primitives με χρήση της 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 (για μετατροπή) + Συλλογές (για 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));
   }
}

Σημειώστε ότι η Arrays.asList() τυλίγει τον υποκείμενο πίνακα, οπότε δεν θα πρέπει να είναι πολύ απαιτητική σε μνήμη και δεν θα πρέπει να εκτελεί αντιγραφή στα στοιχεία του πίνακα.

Σχόλια (3)

Ναι, αυτό γίνεται στην κλάση Collections. Σημειώστε ότι θα πρέπει να μετατρέψετε χειροκίνητα τον πίνακα primitive char σε Character[].

Ένα σύντομο demo:

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)