java - 在浮点和整数数组中查找最大元素索引的常用方法

标签 java arrays java-8 floating-point integer

这基本上是为了避免冗余代码。我有两个不同的数组,一种是 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/

相关文章:

java - 错误 :could not create the Java Virtual Machine Error:A fatal exception has occured. 程序将退出

java - 搜索 jar 中的文件

java - 在倒数计时器中启动另一个计时器

java - Android:从Activity调用fragment函数,fragment函数包含getActivity()并返回null

java - 安全和不安全的沮丧示例?

c++ - 访问数组之外​​的内存,二叉堆树

c++ - 如何在 C++ 中搜索字符串数组

java - 从android中的xml数组获取资源

Java 不使用信任库

java - 无法在 Spring Boot 中使用 java.util.Duration 作为 @Value 配置