在尝试根据元素字符串长度对数组进行排序时,我遇到了编译错误.我有一套开始,
Set<String> arraycat = new HashSet<String>();
//add contents to arraycat
String[] array = arraycat.toArray(new String[0]);
//array looks like this now:
//array=[cat,cataaaa,cataa,cata,cataaa]
Run Code Online (Sandbox Code Playgroud)
我理想的是要排序到
array=[cat,cata,cataa,cataaa,cataaaa]
Run Code Online (Sandbox Code Playgroud)
所以我有一个类型的比较器
class comp implements Comparator {
public int compare(String o1, String o2) {
if (o1.length() > o2.length()) {
return 1;
} else if (o1.length() < o2.length()) {
return -1;
} else {
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我打电话给上课
Collections.sort(array, new comp());
Run Code Online (Sandbox Code Playgroud)
但是,它抛出了两个编译错误:
comp is not abstract and does not override abstract method compare(java.lang.Object,java.lang.Object) in java.util.Comparator
class comp implements Comparator {
^
testa.java:59: cannot find symbol
symbol : method sort(java.lang.String[],comp)
location: class java.util.Collections
Collections.sort(array, new comp());
^2 errors
Run Code Online (Sandbox Code Playgroud)
我很感激任何解决问题的线索.
Lau*_*ves 15
您需要指定一个类型参数,以Comparator使您的实现工作.
class comp implements Comparator<String> {
public int compare(String o1, String o2) {
if (o1.length() > o2.length()) {
return 1;
} else if (o1.length() < o2.length()) {
return -1;
} else {
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Java 1.7及更高版本中,您还可以将此方法的主体简化为:
class comp implements Comparator<String> {
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
}
Run Code Online (Sandbox Code Playgroud)
另外,对对象进行Collections.sort排序List.由于您要对数组进行排序,因此您应该使用Arrays.sort:
Arrays.sort(array, new comp());
Run Code Online (Sandbox Code Playgroud)
Arrays.sort()如果数据源是a,则需要使用方法array.
例如,
String []array={"first","second","third","six"};
Arrays.sort(array,new Comparator<String>()
{
public int compare(String s1,String s2)
{
return s1.length() - s2.length();
}
});
Run Code Online (Sandbox Code Playgroud)
或者将数组转换为List以使用Collections.sort()方法,
Collections.sort(Arrays.asList(array),new Comparator<String>()
{
public int compare(String s1,String s2)
{
return s1.length() - s2.length();
}
});
Run Code Online (Sandbox Code Playgroud)
一内衬
上升
Arrays.sort(words, Comparator.comparingInt(String::length));
Run Code Online (Sandbox Code Playgroud)
降序
Arrays.sort(words, Comparator.comparingInt(String::length).reversed());
Run Code Online (Sandbox Code Playgroud)
小智 1
通过使用流和比较器实现了相同的效果,如下所示-
Arrays.stream(array)
.sorted(Comparator.comparingInt(String::length))
.forEach(a -> System.out.print(a + " "));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30264 次 |
| 最近记录: |