以防万一,我有以下格式的字符串数组-


[“ synthia 16”,“ alicia 3”,“ alicia 2”,“ alicia 1”,“ synthia 2”]


该列表将首先按名称排序,然后按以下编号排序。排序的输出应为-


[“ alicia 1”,“ alicia 2”,“ alicia 3”,“ synthia 2”,“ synthia 16”]


我使用了comaparator来使用Java:

import java.util.Comparator;
import java.util.Arrays;

public class SortList {

public static void main ( String[] args) {
    String[] names = {"synthia 16", "alicia 4", "alicia 19", "alicia 1", "synthia 2"};
    System.out.println("Unsorted list:\n ");
    displayList(names);

    Arrays.sort(names, new nameComparator());
    System.out.println("\nSorted list:\n");
    displayList(names);
}

public static void displayList(String[] names) {
    for(String name:names) {
        System.out.println(name);
    }
}

private static class nameComparator implements Comparator<String> {
    @Override
    public int compare(String s1, String s2) {
        String[] s1NameNumPair = s1.split(" ");
        String[] s2NameNumPair = s2.split(" ");
        if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) > 1) {
            return 1;
        } else if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) < 1) {
            return -1;
        } else {
            Double n1 = Double.parseDouble(s1NameNumPair[1]);
            Double n2 = Double.parseDouble(s2NameNumPair[1]);
            if (n1 > n2) { return 1; }
            else if (n1 < n2) { return -1; }
            else { return 0; }
        }
    }
}
}


但是,使用这样的比较器只能按名称的字母顺序对数组进行排序。这是此代码生成的输出:

Unsorted list:

synthia 16
alicia 4
alicia 19
alicia 1
synthia 2

Sorted list:

alicia 1
alicia 19
alicia 4
synthia 2
synthia 16


如何获得正确的排序输出?

最佳答案

您必须检查> 0< 0,以便== 0转到其他位置,
试试下面

if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) > 0) {
    return 1;
} else if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) < 0) {
    return -1;
} else {
    Double n1 = Double.parseDouble(s1NameNumPair[1]);
    Double n2 = Double.parseDouble(s2NameNumPair[1]);
    return n1.compareTo(n2);
}

07-27 21:08