这基本上是为了避免冗余代码。我有两个不同的数组,一种是 Float
类型,一种是 Integer
类型。我需要在两个数组中找到最大元素的索引,这很容易做到,因为我可以编写两种不同的方法,一种用于比较 float ,一种用于比较整数。
我试图改进的是只编写一个通用方法,该方法可以接受任一数组作为参数,并可以返回最大索引。到目前为止我尝试过但不成功的是:
private static int findMaxIndex(Object [] arr){
int maxIndex =(int) IntStream.range(0,arr.length)
.boxed()
.max(Comparator.comparingInt(i -> arr[i])) // getting compiler error here
.map(max->arr[max])
.orElse(-1);
return maxIndex;
}
我希望像这样调用这个方法:
Float [] a = {0.3f, 0.5f, 0.9f, 0.7f, 0.1f};
Integer []b = {3000, 250, 100, 2000, 2000, 10246};
int maxIndexFloatArray = findMaxIndex(a);
int maxIndexIntegerArray = findMaxIndex(b);
我很确定有更简单的方法可以做到这一点,但我现在对 java 代码有点生疏了。希望这能正确解释问题。
最佳答案
lambda reduce
比较Comparable
private static <T extends Comparable<? super T>> int findMaxIndex(T[] arr) {
return IntStream.range(0, arr.length)
.reduce((l, r) -> arr[l].compareTo(arr[r]) < 0 ? r : l).orElse(-1);
}
对于多个最大值,返回第一个的索引
如果您需要最后一个最大值的索引,请更改 <
至<=
arr
可以为空,但不能包含 null
值(value)观
关于java - 在浮点和整数数组中查找最大元素索引的常用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66413466/