尝试根据元素字符串长度对数组进行排序时,我被编译错误震惊。我有一套开始,
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]
我理想地想排序
array=[cat,cata,cataa,cataaa,cataaaa]
所以我有一个比较器类型
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;
}
}
}
然后我打电话给全班
Collections.sort(array, new comp());
但随后,它引发了两个编译错误:
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
任何解决问题的线索,我将不胜感激。
您需要指定一个类型参数,以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;
}
}
}
在Java 1.7和更高版本中,您还可以将此方法的主体简化为:
class comp implements Comparator<String> {
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
}
另外,对对象进行Collections.sort
排序List
。由于要对数组进行排序,因此应使用Arrays.sort
:
Arrays.sort(array, new comp());
在引入比较器之前,输出是: 此代码生成的输出为: 我希望它产生的输出是: 编辑:为澄清而编辑。数组已更改,并在添加比较器之前输出。
问题内容: 我想按长度顺序排列一个ArrayList字符串,而不仅仅是数字顺序。 例如,该列表包含以下单词: 需要根据它们的长度差异将它们排序为特殊字符串,例如: 因此最终列表如下所示(方括号中的差异): 问题答案: 使用自定义比较器: 然后使用对列表进行排序。
问题内容: 我正在尝试使用来根据字符串的长度对字符串数组进行排序,但这会按字典顺序而不是按长度对字符串进行排序。这是我的代码: 排序后: 但是我想要的是 如何获得上述输出?请给出JDK 1.7和JDK1.8的答案。 问题答案: 如果您使用的是 JDK 1.8或更高版本,则可以使用 lambda表达式( 如 matt 答案)。但是,如果您使用的是 JDK 1.7或更早版本,请尝试编写一个 自定义Co
问题内容: 似乎PHP的运算符区分大小写。那么有使用理由吗? 执行以下操作是否安全? 问题答案: 使用它的原因是因为 如果str1小于str2,则返回<0;如果str1大于str2,则> 0;如果相等,则> 0。 仅返回或,它不会告诉您哪个是“更大”的字符串。
我正试图根据员工的加入日期对他们的列表进行排序。下面是我的员工类。 下面是我的比较器类:
我有字符串数组:15MB、12MB、1TB、1GB。我想通过遵循MB小于GB和TB的规则来对它们进行词典比较。所以最后我想得到:12MB,15MB,1GB,1TB。我找到了一个比较字母的方法: 我在考虑用数字和字母拆分字符串,但我如何用字母“MB”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?