使用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()封装了底层数组,因此它不应该太占用内存,它不应该对数组的元素执行复制。 
Google Guava库在它的Chars,Ints,Longs等类中有最小和最大的方法。
所以你可以简单地使用:
 Chars.min(myarray) 
没有转换是必需的,据推测是有效的实施。
 你可以简单地使用新的Java 8 Stream但你必须使用int 。 
 实用程序类Arrays的stream方法为您提供了一个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方法是一个简化操作 ,它允许并行化。 
是的,它在Collections类中完成。 请注意,您将需要手动将原始字符数组转换为字符[]。
一个简短的演示:
 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))); } } 
 import java.util.Arrays; public class apples { public static void main(String[] args) { int a[] = {2,5,3,7,8}; Arrays.sort(a); int min =a[0]; System.out.println(min); int max= a[a.length-1]; System.out.println(max); } } 
我在我的所有应用程序中都有一个小助手类,如下所示:
 public static double arrayMax(double[] arr) { double max = Double.NEGATIVE_INFINITY; for(double cur: arr) max = Math.max(max, cur); return max; } 
 这里有一个实用程序类,提供基本类型的min/max方法: Primitives.java 
 import java.util.Random; public class Main { public static void main(String[] args) { int a[] = new int [100]; Random rnd = new Random (); for (int i = 0; i< a.length; i++) { a[i] = rnd.nextInt(99-0)+0; System.out.println(a[i]); } int max = 0; for (int i = 0; i < a.length; i++) { a[i] = max; for (int j = i+1; j<a.length; j++) { if (a[j] > max) { max = a[j]; } } } System.out.println("Max element: " + max); } } 
 将数组传递给使用Arrays.sort()对其进行Arrays.sort()的方法,以便只对方法所使用的数组进行排序,然后将min设置为array[0] ,将max设置为array[array.length-1] 。 
 你可以很容易地用IntStream和max()方法来做到这一点。 
例
 public static int maxValue(final int[] intArray) { return IntStream.range(0, intArray.length).map(i -> intArray[i]).max().getAsInt(); } 
说明
- 
range(0, intArray.length)– 获取range(0, intArray.length)包含的元素数量的流。
- 
map(i -> intArray[i])– 将流的每个元素映射到intArray的实际元素。
- 
max()– 获取此流的最大元素作为OptionalInt。
- 
getAsInt()– 展开OptionalInt。 (您也可以在这里使用:orElse(0),以防万一OptionalInt为空)
浮点示例:
 public static float getMaxFloat(float[] data) { float[] copy = Arrays.copyOf(data, data.length); Arrays.sort(copy); return copy[data.length - 1]; } public static float getMinFloat(float[] data) { float[] copy = Arrays.copyOf(data, data.length); Arrays.sort(copy); return copy[0]; } 
获取数组的最小值/最大值的基本方法。 如果您需要未排序的数组,您可以创建一个副本或将其传递给返回最小值或最大值的方法。 如果不是,排序数组更好,因为它在某些情况下执行速度更快。
 public class MinMaxValueOfArray { public static void main(String[] args) { int[] A = {2, 4, 3, 5, 5}; Arrays.sort(A); int min = A[0]; int max = A[A.length -1]; System.out.println("Min Value = " + min); System.out.println("Max Value = " + max); } }