如何对列表进行排序<;日期,字符串>;根据日期使用Java语言
我有一些表名作为我的方法的I/p参数。我需要获得creationDate(日期),计算每个表的数量,并将其放入合并列表中) 然后根据创建日期对列表进行排序 方法如下:如何对列表进行排序<;日期,字符串>;根据日期使用Java语言,java,Java,我有一些表名作为我的方法的I/p参数。我需要获得creationDate(日期),计算每个表的数量,并将其放入合并列表中) 然后根据创建日期对列表进行排序 方法如下: public String getData(List tablename){ Lifecycle.beginCall(); EntityManager mgr = (EntityManager) Component.getInstance("entityManager"); List data = new
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],
..........})
这里的挑战是,我想根据日期对列表进行排序。请看一看。您只需编写一个类来实现一个比较器
,并将其与要排序的列表一起提供
更好的是,由于日期已经是可比较的,您可以调用Collections.sort(data)
,它将按升序排序
编辑:仔细检查后,您的列表(数据
)不包含日期对象,它实际上是一个列表,每个元素都是大小为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);
}
});
Collections.sort(数据,新比较器{
@凌驾
公共整数比较(对象o1、对象o2){
对象[]a1=(对象[])o1;
对象[]a2=(对象[])o2;
日期d1=(日期)a1[0];
日期d2=(日期)a2[0];
返回d1。比较(d2);
}
});
最简单的方法是在数据库级别进行排序
将您的查询更改为
Query q = mgr.createQuery("select to_date(s.creationDate), count(s)" +
" from " + element + " s" +
" group by to_date(creationDate)" +
" order by creationDate asc");
如我所见,您可以从几个表中进行选择。您可以使用
UNION
组合一个SQL查询,通过一个查询选择所有记录。这是一个非常类似的查询:。您是否尝试过集合。排序
?您可以使用ORDERBY sql命令。请看以下内容:与您的问题无关,但很重要:使用参数化查询来防止sql注入感谢您的快速响应。我使用DWR功能(class.method(表名列表))在JS中调用上述方法。我已将Collections.sort(数据)添加到我的方法并运行服务器。我收到此错误08:50:55989警告[org.directwebremoting.dwrp.BaseCallMarshaller](http-localhost-127.0.0.1-8080-1)——错误:batchId[0]消息[java.lang.ClassCastException:[Ljava.lang.Object;无法转换为java.lang.Comparable]您是否将sort()与比较器一起使用?很抱歉,我是java初学者,我需要如何/在何处调用/将上述代码段添加到我现有的方法中,您当前在该方法中对列表进行排序。我调用的不是Collections.sort(data),而是2参数sort()方法,并提供一个比较器作为第二个参数(匿名内部类)使用不同的表名值多次运行此查询。所有结果都放在同一个列表中。除非将所有查询与联合结合起来,否则无法在SQL中执行此操作。我使用的是Hibernate注释概念,当我使用联合进行此操作时,它不起作用