当前位置: 首页 > 知识库问答 >
问题:

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

公孙高畅
2023-03-14

我想按日期的月份排序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();

我想让ResultSetarraylist按月排序。

提前谢谢

共有2个答案

秦俊豪
2023-03-14

的确,您可以通过使用Array.sort对数组进行排序,但是在您的情况下,为什么要再次迭代,而不是通过在sql中使用ORDER BY来获得已经排序的结果,然后在添加(合并)一个列表元素到另一个列表元素时,您可以通过使用自定义函数在特定位置排序和插入元素来添加一个元素。

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;
    }
  }    
}
鲁建茗
2023-03-14

尝试这样做:

    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;
        }
    });
 类似资料:
  • 我有三个列表,我们称它们为列表1、列表2和列表3。 清单1和2作为参数由函数接收,清单3在函数中创建。 清单3的显示如下:4日1月1日2月2日8月1日3月1日4月1日5月1日9月1日7月1日7月1日10月1日11月1日12月1日

  • 问题内容: 是否存在Java惯用法来通过sorted的元素进行成对迭代?我的意思是,每次迭代都可以访问集合的一个元素和集合的下一个元素吗? 对于排序的s(和数组),可以使用集合中的索引来完成: 但是那又如何呢?(因为您可以使用,它等同于大小写)。 因此,例如,如果您的排序集包含值{1、2、3、4},则迭代将按该顺序针对(1、2),(2、3),(3、4)对。 问题答案: 您可以通过以下方式简单地实现

  • 我有一个包含多个字段和两个对象的列表,我的要求是形成一个

  • 问题内容: 在查询中引入ORDER BY子句会增加总时间,这是因为数据库需要对排序结果集进行额外的工作: 将结果元组复制到一些临时内存中 对它们进行排序(希望在内存中,否则使用磁盘) 将结果流式传输到客户端 我想念的是为什么仅从联接表中添加列会产生如此不同的性能。 查询1 查询计划 查询2 与上述相同,但不按 查询计划 编辑:添加了更多详细信息 Postgres版本是 8.4 问题答案: 在排序操

  • 为了简单起见,我试图组合两个不同对象的列表,我将它们称为和,最后根据它们的日期值对组合列表进行排序。我已经在这里看到了大部分的答案,但它们并没有展示如何正确实现这样的用例的全貌。 我还实现了一个自定义类,它处理两个给定列表的合并和排序。我们将其称为。使用下面实现的方法。 这就是问题所在,因为我在上得到一个错误,“reason:没有变量类型的实例存在,所以对象符合接口”

  • 我正试图想出一个分而治之的算法来合并j个排序列表和n个元素,但我被卡住了;我不知道如何把这个问题分成更小的子问题。我希望合并算法更高效,如下所示: 合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表合并,以此类推,该列表取O(j*jn)。