Java 通过合并Hibernate的查询输出列表形成的对象的排序ArrayList

Java 通过合并Hibernate的查询输出列表形成的对象的排序ArrayList,java,hibernate,arraylist,Java,Hibernate,Arraylist,我想按日期的月份对ArrayList进行排序,这是通过合并从Hibernate查询输出中获得的2个列表而形成的,但问题是最终的ArrayList不能强制转换到我项目的任何特定用户定义类 sql = "select round(sum(d.displayCost),2), month(d.date) as date, '0' as flag from Countinfo d where year(d.date)=2015 and d.resultId is not null group by

我想按日期的月份对
ArrayList
进行排序,这是通过合并从Hibernate查询输出中获得的2个列表而形成的,但问题是最终的
ArrayList
不能强制转换到我项目的任何特定用户定义类

sql = "select round(sum(d.displayCost),2), month(d.date) as  date, '0' as flag from Countinfo d where  year(d.date)=2015 and d.resultId is not null group by month(d.date) ";
query = session.createQuery(sql);

List list1 = query.list();

sql = " select round(sum(c.clickCost),2), month(c.date) as date, '1'  as flag from Countinfo c where  year(c.date)=2015 and c.resultId is not null group by month(c.date) order by date, flag";
query = session.createQuery(sql);

List resultSet = query.list();

resultSet.addAll(list1);

ListIterator iterator = resultSet.listIterator();
我想让
ResultSet
arraylist按月排序


提前感谢

尝试这样做:

    Arrays.sort(resultSet.toArray(), new Comparator<Object>() {
        @Override
        public int compare(Object o1, Object o2) { 
            // cast your objects to the correct type (watch out for ClassCastException!), 
            // then compare their month fields
            // and return -1, 0 or 1 according to the contract of Comparator
            return 0;
        }
    });
Arrays.sort(resultSet.toArray(),new Comparator()){
@凌驾
公共整数比较(对象o1,对象o2){
//将对象强制转换为正确的类型(注意ClassCastException!),
//然后比较他们的月份字段
//并根据比较器的契约返回-1、0或1
返回0;
}
});

的确,您可以使用
数组对数组进行排序。排序
,但在您的情况下,为什么要再次迭代,您可以通过使用sql中的
排序依据
,然后在添加(合并)时获得已排序的两个结果将一个元素列表到另一个元素,您可以使用自定义函数一次添加一个元素,该函数在特定位置排序和插入元素。
示例代码

public void sortAndInsert(List resultSet, Object objToInsert)//Object is your own type
{      
  for (int i = 0; i < resultSet.size(); i++) 
  {
    // if the element property is smaller we move to next element
    if (resultSet(i).MonthName < objToInsert.MonthName) //Maonth Name is just property name what I have used to compare on
        continue;
    else
    {  
       resultSet.add(i, x);
       return;
    }
  }    
}
public void sortandsert(List resultSet,Object objToInsert)//对象是您自己的类型
{      
对于(int i=0;i
使用
Collections.sort()
并传入适当的
比较器
,但这就是问题所在,对象需要转换到哪个类???,您正在从名为
Countinfo
的表中选择行,因此我认为您应该创建一个DTO(),对这些查询的结果进行建模。如果你不想拥有一个域对象,你甚至可以使用
Tuple
,但是你只能在
条件查询中使用Tuple
()谢谢Francesco,它帮助我解决了我的问题