编写一个函数来确定数组中的最小/最大值是很简单的,例如:

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

但这不是已经在某个地方做过了吗?


当前回答

谷歌Guava库在其char, int, long等类中有min和max方法。

所以你可以简单地使用:

Chars.min(myarray)

不需要转换,并且可以有效地实现。

其他回答

谷歌Guava库在其char, int, long等类中有min和max方法。

所以你可以简单地使用:

Chars.min(myarray)

不需要转换,并且可以有效地实现。

我有一个小助手类在我所有的应用程序与方法:

public static double arrayMax(double[] arr) {
    double max = Double.NEGATIVE_INFINITY;

    for(double cur: arr)
        max = Math.max(max, cur);

    return max;
}
    public int getMin(int[] values){
        int ret = values[0];
        for(int i = 1; i < values.length; i++)
            ret = Math.min(ret,values[i]);
        return ret;
    }

下面是在99%的运行中获得最大值的解决方案(更改0.01以获得更好的结果):

public static double getMax(double[] vals){
    final double[] max = {Double.NEGATIVE_INFINITY};

    IntStream.of(new Random().ints((int) Math.ceil(Math.log(0.01) / Math.log(1.0 - (1.0/vals.length))),0,vals.length).toArray())
            .forEach(r -> max[0] = (max[0] < vals[r])? vals[r]: max[0]);

    return max[0];
}

(不完全严重)

你可以简单地使用新的Java 8 Streams,但你必须使用int。

实用工具类Arrays的stream方法为您提供了一个IntStream,您可以在该IntStream上使用min方法。你也可以用max, sum, average…

getAsInt方法用于从OptionalInt中获取值

import java.util.Arrays;

public class Test {
    public static void main(String[] args){
        int[] tab = {12, 1, 21, 8};
        int min = Arrays.stream(tab).min().getAsInt();
        int max = Arrays.stream(tab).max().getAsInt();
        System.out.println("Min = " + min);
        System.out.println("Max = " + max)
    }

}

= = = =更新

如果执行时间很重要,并且希望只遍历一次数据,那么可以像这样使用summaryStatistics()方法

import java.util.Arrays;
import java.util.IntSummaryStatistics;

public class SOTest {
    public static void main(String[] args){
        int[] tab = {12, 1, 21, 8};
        IntSummaryStatistics stat = Arrays.stream(tab).summaryStatistics();
        int min = stat.getMin();
        int max = stat.getMax();
        System.out.println("Min = " + min);
        System.out.println("Max = " + max);
    }
}

这种方法可以提供比经典循环更好的性能,因为summaryStatistics方法是一个约简操作,并且它允许并行化。