Java Arrays.sort抛出编译时错误';从Comparator.派生的匿名类';
错误: 必须声明从Comparator派生的匿名类 抽象或实现抽象方法比较(T,T) 我想根据地图中的频率对数组进行排序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
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 thatpublic static void sort(T[]a,ComparatorI没有意识到您提到了int[]
。我不小心把它读成了Integer[]
。还添加了Andreas关于用法Integer的建议。比较和Integer。比较到arr
是什么类型?