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,它帮助我解决了我的问题