首页 > 解决方案 > 在 Float 和 Integer 数组中查找最大元素索引的常用方法

问题描述

这基本上是为了避免冗余代码。我有两个不同的数组,一种是Float类型,一种是Integer类型。我需要在两个数组中找到最大元素的索引,这很容易做到,因为我可以编写两种不同的方法,一种用于比较浮点数,一种用于比较整数。

我想要改进的是只编写一个通用方法,该方法可以将任一数组作为参数并可以返回最大索引。到目前为止,我没有成功的尝试是:

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 代码中有点生疏了。希望这能正确解释这个问题。

标签: javaarraysjava-8floating-pointinteger

解决方案


reduce带有比较Comparables 的lambda

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


推荐阅读