sort使用比较器的字符串列表

时间:2012-08-27 13:31:33

标签: java list sorting comparator

我有 -

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 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

你不能直接在一个类中使用代码,它应该在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);
    }
}

答案 2 :(得分:0)

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

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

答案 3 :(得分: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);
     }
}