Java 用于排序 ArrayList 的内联比较器的问题
Issues with Java in-line comparator for sorting ArrayList
List<String> listOfWords = new ArrayList<String>();
Collections.sort(listOfWords, new Comparator<String>()) {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
现在我有一个单词列表,我想按升序对它们进行排序。但是,当我 运行 上面的代码时,出现语法错误(例如,编译器说我缺少括号和圆括号。但是当我注释掉以下内容时:
Collections.sort(listOfWords, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
一切运行都很好。我执行的排序有误吗?
您的编译器正在告诉您哪里出了问题。你在错误的地方有括号。
可能您还没有意识到您正在创建的 Comparator
是一个 anonymous class?这些被声明为:new Comparator<String>() { ... }
所以你在大括号 { ... }
中被视为语句块的位进入 inside 方法调用的方法参数部分。
您发布的代码:
Collections.sort(listOfWords, new Comparator<String>()) {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
更正后的代码:
Collections.sort(listOfWords, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
如果变化不明显:
- Collections.sort(listOfWords, new Comparator()) {
+ Collections.sort(listOfWords, new Comparator() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
- }
+ });
List<String> listOfWords = new ArrayList<String>();
Collections.sort(listOfWords, new Comparator<String>()) {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
现在我有一个单词列表,我想按升序对它们进行排序。但是,当我 运行 上面的代码时,出现语法错误(例如,编译器说我缺少括号和圆括号。但是当我注释掉以下内容时:
Collections.sort(listOfWords, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
一切运行都很好。我执行的排序有误吗?
您的编译器正在告诉您哪里出了问题。你在错误的地方有括号。
可能您还没有意识到您正在创建的 Comparator
是一个 anonymous class?这些被声明为:new Comparator<String>() { ... }
所以你在大括号 { ... }
中被视为语句块的位进入 inside 方法调用的方法参数部分。
您发布的代码:
Collections.sort(listOfWords, new Comparator<String>()) {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
更正后的代码:
Collections.sort(listOfWords, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
如果变化不明显:
- Collections.sort(listOfWords, new Comparator()) { + Collections.sort(listOfWords, new Comparator() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } - } + });