遍历对象数组列表

Pan*_*kaj 3 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;
}
Run Code Online (Sandbox Code Playgroud)

并获得以下数据库结果.

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  
Run Code Online (Sandbox Code Playgroud)

为了迭代这个结果,我正在使用以下方法

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

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

Cos*_*atu 7

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

for (Object[] result : resultList) {
    // ...
Run Code Online (Sandbox Code Playgroud)

另一种"更好的方式"依赖于您知道列表大小的事实,并且您可以在for循环中使用计数器:

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

总而言之,有几种方法可以迭代列表,但可以说有更好的方法:这是一个用例问题(如果你正在使用那个i计数器来处理其他事情或者你正在使用它)在iterator也从列表中删除一些元素),或者简单的味道(低层次的与语法糖的事情).