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();
            }
-       }
+       });