用于排序ArrayList的Java在线比较器的问题

时间:2015-02-21 01:33:10

标签: java sorting arraylist comparator

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

一切都运行良好。我实施排序错了吗?

1 个答案:

答案 0 :(得分:1)

你的编译器告诉你什么是错的。你在错误的地方有括号。

您可能还没有意识到您创建的Comparatoranonymous class?这些声明为:new Comparator<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();
    }
});

如果变化不明显:

-       Collections.sort(listOfWords, new Comparator()) {
+       Collections.sort(listOfWords, new Comparator() {
            @Override
            public int compare(String s1, String s2) {
                return s1.length() - s2.length();
            }
-       }
+       });