如何对列表进行排序<;日期,字符串>;根据日期使用Java语言

如何对列表进行排序<;日期,字符串>;根据日期使用Java语言,java,Java,我有一些表名作为我的方法的I/p参数。我需要获得creationDate(日期),计算每个表的数量,并将其放入合并列表中) 然后根据创建日期对列表进行排序 方法如下: public String getData(List tablename){ Lifecycle.beginCall(); EntityManager mgr = (EntityManager) Component.getInstance("entityManager"); List data = new

我有一些表名作为我的方法的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],
  ..........})
这里的挑战是,我想根据日期对列表进行排序。请看一看。您只需编写一个类来实现一个
比较器
,并将其与要排序的列表一起提供

更好的是,由于日期已经是可比较的,您可以调用
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注释概念,当我使用联合进行此操作时,它不起作用