java字符串数组排序

时间:2015-07-27 22:30:15

标签: java sorting

我必须按日期排序数组列表。我不知道怎么做,所以我将所有值都添加到一个值中。这几乎可以正常工作,但它并没有好几年好这是我的代码:

ArrayList<String> ar = new ArrayList<String>();
        String s1 ="2016|07|21 15:26:20!947!-0.0091002";
        String s2 ="2015|08|21 15:26:20!977!0.0091002";
        String s3 ="2015|07|22 15:26:20!947!1.0091002";
        String s4 ="2015|07|21 16:26:20!946!0.0091001";
        String s5 ="2015|07|21 15:27:20!977!0.0091002";
        String s6 ="2015|07|21 15:26:21!947!1.0091002";
        String s7 ="2015|07|21 15:26:20!946!0.0091001";
        ar.add(s1);
        ar.add(s2);
        ar.add(s3);
        ar.add(s4);
        ar.add(s5);
        ar.add(s6);
        ar.add(s7);
        Collections.sort(ar.subList(1, ar.size()));
        Object[][] data = {
                {ar.get(0)},
                {ar.get(1)},
                {ar.get(2)},
                {ar.get(3)},
                {ar.get(4)},
                {ar.get(5)},
                {ar.get(6)},
        };

这是输出:

2016|07|21 15:26:20!947!-0.0091002
2015|07|21 15:26:20!946!0.0091001
2015|07|21 15:26:21!947!1.0091002
2015|07|21 15:27:20!977!0.0091002
2015|07|21 16:26:20!946!0.0091001
2015|07|22 15:26:20!947!1.0091002
2015|08|21 15:26:20!977!0.0091002

但这就是我的需要:

2015|07|21 15:26:20!946!0.0091001
2015|07|21 15:26:21!947!1.0091002
2015|07|21 15:27:20!977!0.0091002
2015|07|21 16:26:20!946!0.0091001
2015|07|22 15:26:20!947!1.0091002
2015|08|21 15:26:20!977!0.0091002
2016|07|21 15:26:20!947!-0.0091002

我没有ida为什么会发生这种情况

3 个答案:

答案 0 :(得分:0)

只需使用:

Collections.sort(ar);

对整个列表进行排序。

请记住,Java列表是从零开始的,因此ar.get(0)是第一个元素。 List.subList(i, j)将子列表从i(包含)返回到j(仅限于)。

因此,要通过子列表对整个列表进行排序,您需要使用i = 0j = ar.size()。但是,子列表的间接是不必要的:只需将列表本身传递给Collections.sort

答案 1 :(得分:0)

以下是您的代码的错误

    Collections.sort(ar.subList(1, ar.size()));

您正在尝试对索引1~N进行排序,因此索引0未排序。

你应该做的是整个ArrayList像这样排序

    Collections.sort(ar);

这将按升序对ArrayList<String>进行排序。

<强>输出

2015|07|21 15:26:20!946!0.0091001
2015|07|21 15:26:21!947!1.0091002
2015|07|21 15:27:20!977!0.0091002
2015|07|21 16:26:20!946!0.0091001
2015|07|22 15:26:20!947!1.0091002
2015|08|21 15:26:20!977!0.0091002
2016|07|21 15:26:20!947!-0.0091002

但是,您的代码只是按升序对字符串列表进行排序,因此如果您有不同顺序的月/日/年,则不会按时间排序。您应该使用Java或其他库(如Apache)中提供的日期/时间工具。

答案 2 :(得分:-1)

您只排序列表子列表的视图,这对您实际想要返回的列表没有影响。实际上,List.sublist会返回列表。

顺便说一句,你的代码可能会短得多:

List<String> list = Arrays.asList(
    "2016|07|21 15:26:20!947!-0.0091002", "2015|08|21 15:26:20!977!0.0091002", "2015|07|22 15:26:20!947!1.0091002",
    "2015|07|21 16:26:20!946!0.0091001", "2015|07|21 15:27:20!977!0.0091002", "2015|07|21 15:26:21!947!1.0091002", "2015|07|21 15:26:20!946!0.0091001");
Collections.sort(list);