0

我有一些表名作为我的方法的 i/p 参数。我需要获取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);

        }
    }
}

现在我有列表数据,例如:

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

这里的挑战是我希望这个列表根据日期排序

4

3 回答 3

1

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

更好的是,由于 Date 已经是 Comparable,您只需调用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);
    }
});
于 2013-02-23T14:42:11.510 回答
0

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

将您的查询更改为

       Query q = mgr.createQuery("select to_date(s.creationDate), count(s)" +
                                  " from " + element + " s" +
                                  " group by to_date(creationDate)" +
                                  " order by creationDate asc");
于 2013-02-23T14:49:25.453 回答
0

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

于 2013-02-23T14:52:15.227 回答