java - 没有找到合适的排序方法
问题描述
我遇到了一个奇怪的 Java 编译器问题
这是代码
public int[] findRightInterval(int[][] intervals) {
int n = intervals.length;
int[] intIdx = new int[n];
for(int i=0;i<n;i++) {
intIdx[i]=i;
}
Arrays.sort(intIdx, (a, b) -> (intervals[a][0]-intervals[b][0]));
...
}
完整的错误是
Line 8: error: no suitable method found for
sort(int[],(a,b)->(in[...]][0]))
Arrays.sort(intIdx, (a, b) -> (intervals[a][0]-intervals[b][0]));
^
method Arrays.<T#1>sort(T#1[],Comparator<? super T#1>) is not applicable
(inference variable T#1 has incompatible bounds
equality constraints: int
lower bounds: Object)
method Arrays.<T#2>sort(T#2[],int,int,Comparator<? super T#2>) is not applicable
(cannot infer type-variable(s) T#2
(actual and formal argument lists differ in length)) where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>sort(T#1[],Comparator<? super T#1>)
T#2 extends Object declared in method <T#2>sort(T#2[],int,int,Comparator<? super T#2>)
另一方面,如果我用它替换Arrays.sort(intIdx, (a, b) -> (intervals[a][0]-intervals[b][0]));
它就Arrays.sort(intervals, (a, b) -> (a[0]-b[0]));
可以了。
想知道为什么编译器会抛出这个错误?
解决方案
public static <T> void Arrays.sort(T[] a, Comparator<? super T> c)
您不能int[]
使用比较器对数组进行排序。只有Integer[]
. 因此,您的代码段可以重写为:
Arrays.sort(Arrays.stream(intIdx).boxed().toArray(), (a, b) -> intervals[a][0] - intervals[b][0]);
PS我建议你使用Stream
你的例子:
intIdx = Arrays.stream(intIdx)
.boxed()
.sorted(Comparator.comparingInt(a -> intervals[a][0]))
.mapToInt(i -> i)
.toArray();
推荐阅读
- scenekit - 根据顶点世界位置Y坐标修改Metal片段着色
- android - 图片不会从网络加载
- python - Django:根据“a”标签点击显示不同的列表
- mysql - 通过第二个表加入条件查询
- java - 动态加载 JTable 后,在选定的 JComboBox 出现之前
- graphql - graphql - 类型错误:graphql_1.getIntrospectionQuery 不是函数
- flutter - 如何在单个颤动屏幕中加载两个列表视图?
- c - 如何在 C 中获得正确的全局变量初始化?
- r - ACF 函数中的错误:在结果中获取所有 NA
- spring-boot - 使用 Spring Cloud(无状态)在隐式授权类型中使用 Api-Gateway 实现 OAuth