我必须按日期排序数组列表。我不知道怎么做,所以我将所有值都添加到一个值中。这几乎可以正常工作,但它并没有好几年好这是我的代码:
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为什么会发生这种情况
答案 0 :(得分:0)
只需使用:
Collections.sort(ar);
对整个列表进行排序。
请记住,Java列表是从零开始的,因此ar.get(0)
是第一个元素。 List.subList(i, j)
将子列表从i
(包含)返回到j
(仅限于)。
因此,要通过子列表对整个列表进行排序,您需要使用i = 0
和j = 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);