如何根据日期</date,>在Java中对列表<date,string =“”>进行排序

时间:2013-02-23 14:37:45

标签: java

我有一些表名作为我的方法的i / p参数。我需要获取creationDate(date),计算每个表并将其放在合并的List中

然后根据creationDate对列表进行排序。

以下是方法:

public String getData(List tablename){
    Lifecycle.beginCall();
    EntityManager mgr = (EntityManager) Component.getInstance("entityManager");
    List data = new ArrayList();
    if (!tablename.isEmpty())
    {
        Iterator itr = tablename.iterator();
        while(itr.hasNext())
        {
            String element = itr.next().toString();
            Query q = mgr.createQuery("select to_date(s.creationDate), count(s)" +
                                      " from " + element + " s" +
                                      " group by to_date(creationDate)" +
                                      " order by to_date(creationDate)");
            List dataTemp = q.getResultList();

            data.addAll(dataTemp);

        }
    }
}

现在我有了List数据,例如:

({["Jan 3, 2013 12:00:00 AM",10],
  ["Feb 3, 2013 12:00:00 AM",10],
  ["Jan 1, 2013 12:00:00 AM",10],
  ..........})

这里的挑战是我希望根据日期

对此列表进行排序

3 个答案:

答案 0 :(得分:1)

看看Collections.sort()。您需要做的就是编写一个实现Comparator<Date>的类,并将其与您的列表一起提供以进行排序。

甚至更好,因为Date已经是可比较的,你可以只调用Collections.sort(data),它将按升序排序。

编辑:仔细检查后,您的列表(data)不包含Date对象,它实际上是一个List,每个元素都是一个大小为2的对象数组 - 数组中的第一项是表创建日期和第二个是行数。所以你需要这样排序:

Collections.sort(data, new Comparator<Object> {
    @Override
    public int compare(Object o1, Object o2) {
        Object[] a1 = (Object[]) o1;
        Object[] a2 = (Object[]) o2;
        Date d1 = (Date) a1[0];
        Date d2 = (Date) a2[0];
        return d1.compareTo(d2);
    }
});

答案 1 :(得分:0)

最简单的方法是在数据库级别进行排序。

将您的查询更改为

       Query q = mgr.createQuery("select to_date(s.creationDate), count(s)" +
                                  " from " + element + " s" +
                                  " group by to_date(creationDate)" +
                                  " order by creationDate asc");

答案 2 :(得分:0)

如我所见,您可以从多个表格中进行选择。您可以使用UNION组合一个SQL查询,以通过一个查询选择所有记录。这是非常相似的查询:SQL Query - Using Order By in UNION