java - 在 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 代码中有点生疏了。希望这能正确解释这个问题。
解决方案
reduce
带有比较Comparable
s 的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
值
推荐阅读
- java - Android按钮的背景颜色会自动改变
- android - 滚动到recyclerview android中的特定视图类型
- javascript - 如何使用 JS 触发下载音频链接,而无需浏览器导航到新页面?
- r - 使用 R 命令 dnorm 查找计数的期望值
- laravel - 如何在 Laravel Vue 设置中使用作用域插槽来类绑定
- php - 检测 fastCGI 是否在远程服务器上运行
- kubernetes - 无法连接到 Kafka 无头服务
- kurento - Kurento Media Server:服务在启动后立即停止
- php - VSCode 没有按照 php.ini 显示 DOCUMENT_ROOT
- javascript - 当我在我的购物篮中删除多个产品时,只有第一个产品数量返回我的数据库,其他产品数量没有返回