排序本机方法Java的问题

dev*_*033 3 java sorting collections

我正在尝试使用本机sort方法来排序元素.

码:

List<String> list = new ArrayList();
Collections.sort(list);
Run Code Online (Sandbox Code Playgroud)

输入1:

Before order: 65 31 37 37 72 76 61 35 57 37
After order:  31 35 37 37 37 57 61 65 72 76
Expected:     Ok.
Run Code Online (Sandbox Code Playgroud)

输入2:

Before order: 45 186 185 55 51 51 22 78 64 26 49 21
After order:  185 186 21 22 26 45 49 51 51 55 64 78
Expected:     21 22 26 45 49 51 51 55 64 78 185 186
Run Code Online (Sandbox Code Playgroud)

问题是该方法在某些情况下排序错误,我该如何解决?

Ell*_*sch 5

你有一个List<String>,所以Collections.sortString字典顺序排序.你可以使用List<Integer>

List<Integer> al = Arrays.asList(45, 186, 185, 55, 51, 51, 22, 78, 64, 26, 49, 21);
Collections.sort(al);
System.out.println(al);
Run Code Online (Sandbox Code Playgroud)

但是,如果你必须使用String(s),那么你需要提供一个自定义Comparator(因为默认String排序不是你想要的).就像是,

List<String> al = Arrays.asList("45", "186", "185", "55", "51", "51", //
        "22", "78", "64", "26", "49", "21");
Collections.sort(al, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(Integer.parseInt(o1), Integer.parseInt(o2));
    }
});
System.out.println(al);
Run Code Online (Sandbox Code Playgroud)

哪个输出(如第一个例子)

[21, 22, 26, 45, 49, 51, 51, 55, 64, 78, 185, 186]
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是,在Java 8中你可以特别简洁地做到:`list.sort(Comparator.comparingInt(Integer :: parseInt));` (5认同)