Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用比较器对字符串列表进行排序_Java_List_Sorting_Comparator - Fatal编程技术网

Java 使用比较器对字符串列表进行排序

Java 使用比较器对字符串列表进行排序,java,list,sorting,comparator,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)

我有-

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);
}
import java.util.*;
公共类测试比较{
列表=数组。asList(“10”、“1”、“20”、“11”、“21”、“12”);
比较器cmp=新比较器(){
公共整数比较(字符串o1、字符串o2){
返回Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
}
};
集合。排序(列表,cmp);
}

Collections.sort(列表,cmp)上
有一个错误-
在标记“(”,删除此标记)上出现语法错误。此语法有什么错误?

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

您不能将代码直接包装在类中,它应该位于类似
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);
    }
}
公共类TestCompare{
公共静态void main(){
列表=数组。asList(“10”、“1”、“20”、“11”、“21”、“12”);
比较器cmp=新比较器(){
公共整数比较(字符串o1、字符串o2){
返回Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
}
};
集合。排序(列表,cmp);
}
}

在类级别,只允许声明(和初始值设定项)块。前两个语句是声明(它们被解释为字段声明,尽管这可能不是您的意图)。第三个不是声明,因此它失败


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

Post1.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);
     }
}
公共类TestCompare{
公共静态void main(){
列表=数组。asList(“10”、“1”、“20”、“11”、“21”、“12”);
比较器cmp=(o1,o2)->{
返回Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
};
集合。排序(列表,cmp);
}
}

当main是一个内部函数时,如何通过eclispe运行该类?@URL87只需使用
run…
向导,当源数组包含非数值时,它将崩溃