3

我有 -

import java.util.*;

public class TestCompare {

    List<String> list = Arrays.asList("10", "1", "20", "11", "21", "12");
    Comparator<String> cmp = new Comparator<String>() {
        public int compare(String o1, String o2) {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        }
    };
    Collections.sort(list, cmp);
}

Collections.sort(list, cmp);有一个错误 - Syntax error on token "(", delete this token。这种语法有什么问题?

4

4 回答 4

9

您需要将代码包装在方法中,而不是直接在类块中。

于 2012-08-27T13:33:53.230 回答
8

您不能直接在类中包含代码,它应该在如下方法中main

public class TestCompare {
    public static void main() {
      List<String> list = Arrays.asList("10", "1", "20", "11", "21", "12");
      Comparator<String> cmp = new Comparator<String>() {
      public int compare(String o1, String o2) {
        return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
      }
      };
      Collections.sort(list, cmp);
    }
}
于 2012-08-27T13:34:30.530 回答
0

在类级别,只允许声明(和初始化程序)块。您的前两个语句是声明(它们被解释为字段声明,即使这可能不是您的意图)。第三个不是声明,所以它失败了。

声明可以是:方法、字段、构造函数、内部类

于 2012-08-27T13:35:42.223 回答
0

在 1.8 之后,您也可以使用 lambda 表达式。

public class TestCompare {
    public static void main() {
      List<String> list = Arrays.asList("10", "1", "20", "11", "21", "12");
        Comparator<String> cmp = (o1, o2) -> {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        };
        Collections.sort(list, cmp);
     }
}
于 2020-07-24T08:02:57.557 回答