Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arrays.sort抛出编译时错误';从Comparator.派生的匿名类';_Java_Sorting_Comparator - Fatal编程技术网

Java Arrays.sort抛出编译时错误';从Comparator.派生的匿名类';

Java Arrays.sort抛出编译时错误';从Comparator.派生的匿名类';,java,sorting,comparator,Java,Sorting,Comparator,错误: 必须声明从Comparator派生的匿名类 抽象或实现抽象方法比较(T,T) 我想根据地图中的频率对数组进行排序 HashMap<Integer,Integer> freq = new HashMap<>(); for(int a:arr) { freq.putIfAbsent(a,freq.getOrDefault(a,0)+1); } Arrays.sort(arr,new Compara

错误:

必须声明从Comparator派生的匿名类 抽象或实现抽象方法比较(T,T)

我想根据地图中的频率对数组进行排序

HashMap<Integer,Integer> freq = new HashMap<>();
        for(int a:arr)
        {
            freq.putIfAbsent(a,freq.getOrDefault(a,0)+1);
        }
Arrays.sort(arr,new Comparator<>(){
            public int compare(int a,int b)
            {
                if(freq.get(b)!=freq.get(a))
                    return freq.get(b)-freq.get(a);
                else
                    return a-b;
            }
        });
HashMap freq=newhashmap();
用于(int a:arr)
{
freq.putIfAbsent(a,freq.getOrDefault(a,0)+1);
}
sort(arr,新的比较器(){
公共整数比较(整数a、整数b)
{
if(freq.get(b)!=freq.get(a))
返回频率get(b)-频率get(a);
其他的
返回a-b;
}
});

这里缺少什么?

数组
没有基于
比较器对
int[]进行排序的方法

你可以做:

    List<Integer> sorted = Arrays.stream(arr).boxed().sorted(new Comparator<Integer>() {
        public int compare(Integer a, Integer b) {

            if(!Objects.equals(freq.get(b),freq.get(a)))
                return Integer.compare(freq.get(b), freq.get(a));
            else
                return a.compareTo(b);

        }

    }).collect(Collectors.toList());
第二个附加注释


不要使用==或!=在
Integer
上,这可能适用于某些值(>-128&&假设您有一个
Integer[]
之类的值)

Integer[] arr = { 10, 2, 30, 4 };
int[] arr = { 10, 2, 30, 4 };
您可以按如下方式进行操作:

Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        if (freq.get(b) != freq.get(a))
            return Integer.compare(freq.get(b), freq.get(a));
        else
            return a.compareTo(b);
    }
});
将其转换为
Integer[]
as

Integer[] arr1 = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(arr1, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        if (freq.get(b) != freq.get(a))
            return Integer.compare(freq.get(b), freq.get(a));
        else
            return a.compareTo(b);
    }
});
然后将
arr1
排序为

Integer[] arr1 = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(arr1, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        if (freq.get(b) != freq.get(a))
            return Integer.compare(freq.get(b), freq.get(a));
        else
            return a.compareTo(b);
    }
});
Arrays.sort(arr1,新的比较器(){
@凌驾
公共整数比较(整数a、整数b){
if(freq.get(b)!=freq.get(a))
返回整数。比较(freq.get(b),freq.get(a));
其他的
返回a.compareTo(b);
}
});

您的语句,
数组没有基于比较器对int[]进行排序的方法。请检查。@ArvindKumarAvinash that
public static void sort​(T[]a,ComparatorI没有意识到您提到了
int[]
。我不小心把它读成了
Integer[]
。还添加了Andreas关于用法
Integer的建议。比较
Integer。比较到
arr
是什么类型?