遍历对象数组列表

时间:2013-06-20 18:57:38

标签: java

我正在使用带有以下代码的本机sql进行查询

private <T> List<T> executeNativeQuery(String queryString,
        Map<String, Object> param, Class<T> clazz) {
    Query query = entityManager.createNativeQuery(queryString);
    if (param != null && param.size() > 0) {
        for (Map.Entry<String, Object> entry : param.entrySet()) {
            query.setParameter(entry.getKey(), entry.getValue());
        }
    }
    List<T> resultList = query.getResultList();
    return resultList;
}

获取以下数据库结果。

VendorName | IncidentID | IncidentStatus | IncidentDate
-------------------------------------------------------
XYZ        | 100        |     Open       | 02-JUN-2011    
ABC        | 101        |     Closed     | 03-JUN-2011  
MNP        | 102        |     Open       | 01-JUN-2011  
LPQ        | 103        |     Open       | 01-APR-2011  

要迭代此结果,我正在使用以下方法

 Iterator iter=resultList.iterator();
    while (iter.hasNext()) {
        Object[] result= (Object[]) iter.next();
        System.out.println("Vendor Name-->" +result[0]);
 }

有没有更好的方法来遍历列表?

2 个答案:

答案 0 :(得分:7)

一个“更好的方式”(java 5+ for-each)实际上会转换为您使用迭代器显示的内容,但语法更好:

for (Object[] result : resultList) {
    // ...

另一种“更好的方法”依赖于你知道列表大小的事实,你可以在for循环中使用一个计数器:

for (int i = 0; i < resultList.size(); i++) {
    Object[] result = resultList.get(i);
    // ... the rest ...

总而言之,有几种方法可以遍历列表,但可以说有“更好”的方法:这是一个用例问题(如果你将i计数器用于其他事情或你正在使用iterator也从列表中删除一些元素)或仅仅是品味问题(低级与语法糖)。

答案 1 :(得分:0)

在Java 5+中,每个循环都是首选方式

for (Object[] result : resultList) {...}

这有时会有更好的表现,因为它会计算一次收集大小。 此外,当使用传统的for循环并对两个集合进行嵌套迭代时,您可能会创建一个错误。约书亚布洛赫在他的“有效的爪哇”一书中提到了这一点,第46项。更详细一点。

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683/ref=dp_ob_title_bk