Java Arrays.sort()不接受comparator类型对象

Java Arrays.sort()不接受comparator类型对象,java,comparator,Java,Comparator,我错过什么了吗?它在sort方法上给出了一个错误(没有识别comparator方法),但是如果我使用整数类型数组,那么这个错误就会消失。我们不能用基元类型的数组进行比较吗 public class Test { public static void main(String[] args) { int a[]={21,58,89,45,73,24}; Arrays.sort(a,new Comparator<Integer>(){

我错过什么了吗?它在sort方法上给出了一个错误(没有识别comparator方法),但是如果我使用整数类型数组,那么这个错误就会消失。我们不能用基元类型的数组进行比较吗

public class Test {
    public static void main(String[] args) {
        int a[]={21,58,89,45,73,24};
        Arrays.sort(a,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                if(o1%10>o2%10) return -1;
                return 1;
            }   
        });
公共类测试{
公共静态void main(字符串[]args){
int a[]={21,58,89,45,73,24};
sort(一个新的比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
如果(o1%10>o2%10)返回-1;
返回1;
}   
});

不可以。只能使用接受基本数组的方法对基本数组进行排序,例如
静态无效排序(int[]a)


您不能将基元数组传递给
公共静态无效排序(t[]a,Comparator方法的签名为:
公共静态无效排序(t[]a,Comparator您不能将基元类型传递给
排序
方法。 你能试试这个吗

// Your array
int a[]={21, 58, 89, 45, 73, 24};

int[] ints = Arrays.stream(a).boxed().sorted(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        if (o1 % 10 > o2 % 10) return -1;
        return 1;
    }
}).mapToInt(Integer::intValue).toArray();
//您的数组
INTA[]={21,58,89,45,73,24};
int[]ints=Arrays.stream(a).boxed().sorted(新比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
如果(o1%10>o2%10)返回-1;
返回1;
}
}).mapToInt(Integer::intValue).toArray();

您可以使用Comparator对Integer执行排序,因为Integer实现了Comparable接口。原语只能按本机方式进行排序,例如按数字顺序进行排序

您可以执行以下操作之一:

  • 将整数转换为整数
    inta[]={21,58,89,45,73,24};转换为整数a[]={21,58,89,45,73,24};
  • 如果使用int,不要使用比较器
    数组。排序(a);
  • 创建类,实现可比较的接口,然后在内部操作int数组-更难的方法,不推荐使用
  • 公共类MyInt实现可比较的{
    私有最终整数值;
    公共MyInt(int值){
    这个值=值;
    }
    @凌驾
    公共整数比较o(整数o){
    返回比较(该值为o);
    }
    公共静态整数比较(整数o1,整数o2){
    如果(o1%10>o2%10)返回-1;
    返回1;
    }
    }
    
    @Mehrose您能先解释一下这段代码的用途吗?我在代码中提到了这个数组,现在我想根据最后一个(单位数字)按升序对数字进行排序.Expected output:21,73,24,45,58,89。@Mehrose如果两个数字的最后一位数字相同,该怎么办?默认情况下,它将是排序性质排序感谢buddy,但我们不必将值类型强制转换为整数,因为我们已经用Comparator定义了泛型。如果在y之后将原语类型更改为Integer Objecty,代码就可以正常工作在将流转换回之前,您还可以调用.sort。流用于执行操作链接为什么我们不能将基元类型数组传递给sort?或者您的意思是我们不能使用Comparator参数进行排序?@Ferrybig Thakns!我编辑了代码。这是您想要说的吗?@Mehrose是的。Comparator和基元类型数组不能一起使用。
    // Your array
    int a[]={21, 58, 89, 45, 73, 24};
    
    int[] ints = Arrays.stream(a).boxed().sorted(new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 % 10 > o2 % 10) return -1;
            return 1;
        }
    }).mapToInt(Integer::intValue).toArray();
    
    public class MyInt implements Comparable<Integer> {
    
        private final int value;
    
        public MyInt(int value) {
            this.value = value;
        }
    
        @Override
        public int compareTo(Integer o) {
            return compare(this.value, o);
        }
    
        public static int compare(Integer o1, Integer o2) {
            if(o1%10>o2%10) return -1;
            return 1;
        }
    }