我有一些表名作为我的方法的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],
..........})
这里的挑战是我希望根据日期
对此列表进行排序答案 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。