按Java中的第一个值对字符串中的数字序列排序



我有字符串中的数字序列,我想对它们进行排序。例如:

从:3,4,16; 1,5,16,18,19; 12,14,15,17; 6,10,11;

to:1,5,16,18,19; 3,4,16; 6,10,11; 12,14,15,17;

我的代码:

String test = "3,4,16;1,5,16,18,19;12,14,15,17;6,10,11;";
String sortedTest[] = test.split(";");
Arrays.sort(sortedTest);
for(String i: sortedTest)
    System.out.print(i +";");

,但是显然,当我在此上使用array.sort()时,我会得到:

12,14,15,17; 1,5,16,18,19; 3,4,16; 6,10,11;

我该如何将其排序?

您可以与自定义比较器一起使用排序:

Arrays.sort(sortedTest, (arr1, arr2) -> Integer.valueOf(arr1.split(",")[0]).compareTo(Integer.valueOf(arr2.split(",")[0])));

您需要实现一个将字符串值作为整数转换为整数的比较器,因此将正确排序。

这是一个示例:Java比较类别类排序阵列

然后,使用特定的比较器,您可以完全描述数据在数组中设置的方式以及想要对它们进行排序的方式

我认为您可以使用以下方式:
如果您使用的是Java 7:

String test = "3,4,16;1,5,16,18,19;12,14,15,17;6,10,11;";
String sortedTest[] = test.split(";");
Arrays.sort(sortedTest, new Comparator<String[]>() {
    @Override
    public int compare(String[] o1, String[] o2) {
        //TODO you can change the compare rule
        return o1[0].compareTo(o2[0]);
    }
});


如果您使用的是Java 8:

String test = "3,4,16;1,5,16,18,19;12,14,15,17;6,10,11;";
String sortedTest[] = test.split(";");
Arrays.sort(sortedTest, Comparator.comparing((String[] arr) -> arr[0])
                                      .reversed());

最新更新