2017-10-18 25 views
0

我有列表中的列表,我有问题排序列表中的字符串时间戳。下面是检索时间戳在数据库中的方法:如何排序列表里面的Arraylist java

public static List<List<String>> getLogs(){ 
    sql = new String("SELECT EmpID, ValidDate, GROUP_CONCAT(ValidTime) AS logTime FROM logs WHERE Processed = 0 GROUP BY EmpID, ValidDate"); 
    List<List<String>> values = new ArrayList<>(); 
    List<String> id = new ArrayList<>(); 
    List<String> valDate = new ArrayList<>(); 
    List<String> logs = new ArrayList<>(); 

    try{ 
     stmt = data.createStatement(); 
     rs = stmt.executeQuery(sql); 

     while(rs.next()){ 
      id.add(rs.getString("EmpID")); 
      valDate.add(String.valueOf(rs.getDate("ValidDate"))); 
      logs.add(rs.getString("logTime")); 
     } 
    }catch(SQLException ex){ 
     ex.printStackTrace(); 
    } 
    values.add(id); 
    values.add(valDate); 
    values.add(logs); 

    return values; 
} 

这就是结果:

2017-07-22 17:02:00,11:31:00,12:14:00 
2017-07-22 11:54:00,11:01:00,17:01:00 
2017-07-22 17:01:00,11:30:00,12:29:00 

这不是为了。

这是我如何调用此方法:

for(int i = 0; i < data.getLogs().get(0).size();i++){ 
System.out.println(data.getLogs().get(0).get(i)+" "+data.getLogs().get(1).get(i)+" "+data.getLogs().get(2).get(i)); 
    } 
+1

我没有看到任何排序尝试。 – shmosel

+3

为什么不在SQL级别执行它 –

+0

谢谢,但正如你所看到的结果时间戳不是按顺序11:31是在17:02之后。我正在使用它进行加班计算。 – SilverRay

回答

1

您的SQL更改为

sql = new String("SELECT EmpID, ValidDate, GROUP_CONCAT(ValidTime) AS logTime 
     FROM logs WHERE Processed = 0 GROUP BY EmpID, ValidDate ORDER BY ValidDate"); 
+0

@shmosel感谢您的编辑 –

+0

我试过你的答案,但他们仍然没有正确的顺序..... – SilverRay

+0

'for(int i = 0; i

0

我试过抗体仙的建议和如何在MySQL的数据进行排序,搜索,发现其可能在GROUP_CONCAT中插入ORDER BY,所以这是我修改后的sql语句:

SELECT EmpID, 
     ValidDate, 
     GROUP_CONCAT(ValidTime ORDER BY ValidTime ASC) AS logTime 
FROM logs 
WHERE Processed = 0 
GROUP BY EmpID, ValidDate ORDER BY ValidDate ASC 

感谢tho谁回答并帮助我。