【问题标题】:How to Iterate through List of Object arrays如何遍历对象数组列表
【发布时间】:2014-03-30 09:21:56
【问题描述】:

所以现在我有一个包含一段代码的程序,看起来像这样......

Criteria crit = session.createCriteria(Product.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.max("price"));
projList.add(Projections.min("price"));
projList.add(Projections.countDistinct("description"));
crit.setProjection(projList);
List results = crit.list();

我想迭代结果。所以提前感谢您提供的任何帮助/建议。

【问题讨论】:

  • 如果这是学校作业,请按此标记。否则, List results = crit.list();然后是(产品 p:结果){}

标签: java hibernate


【解决方案1】:

在这种情况下,您将拥有一个列表,其元素是以下数组: [maxPrice,minPrice,count]。

....
List<Object[]> results = crit.list();

for (Object[] result : results) {
    Integer maxPrice = (Integer)result[0];
    Integer minPrice = (Integer)result[1];
    Long count = (Long)result[2];
}

【讨论】:

    【解决方案2】:

    您可以在 List 中使用 Generic,但对于当前代码,您可以按照以下方式进行迭代

    for(int i = 0 ; i < results.size() ; i++){
     Foo foo = (Foo) results.get(i);
    
    }
    

    或者更好地使用可读的 for-each 循环

    for(Foo foo: listOfFoos){
      // access foo here
    }
    

    【讨论】:

    • 或者如果你想更现代一点,可以使用迭代器?比如 for (Iterator pi = results.iterator(); pi.hasNext();) { Product p = pi.next();}
    • 是的,但是这个解决方案是老派和低技术的!谁能不喜欢呢?
    • 无法将 (object[]) 对象数组转换为像 Foo 这样的对象
    【解决方案3】:

    您可能可以这样做:

    for (Object result : results) {
        // process each result
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 2018-04-12
      • 2021-11-30
      • 2017-09-19
      相关资源
      最近更新 更多