Java 遍历对象数组的列表

Java 遍历对象数组的列表,java,Java,我使用本机sql进行查询,代码如下 private <T> List<T> executeNativeQuery(String queryString, Map<String, Object> param, Class<T> clazz) { Query query = entityManager.createNativeQuery(queryString); if (param != null &&

我使用本机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;
}
为了迭代这个结果,我使用以下方法

 Iterator iter=resultList.iterator();
    while (iter.hasNext()) {
        Object[] result= (Object[]) iter.next();
        System.out.println("Vendor Name-->" +result[0]);
 }
有没有更好的方法遍历列表

一种“更好的方法”(每种方法都使用java 5+)将使用迭代器实际转换为您所展示的内容,但语法更好:

for (Object[] result : resultList) {
    // ...
另一种“更好的方法”取决于您知道列表大小,并且可以在for循环中使用计数器:

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

总而言之,有几种方法可以迭代列表,但有“更好”的方法是有争议的:这是一个用例问题(如果您还使用
i
计数器处理其他事情,或者您使用
迭代器也从列表中删除了一些元素),或者只是一个口味问题(低级与语法糖).

在Java 5+中,for-each循环是首选方法

for (Object[] result : resultList) {...}
这有时会有更好的性能,因为它只计算一次集合大小。 另外,当使用传统的for循环并在两个集合上进行嵌套迭代时,您可能会创建一个bug。Joshua Bloch在他的《有效Java》一书第46项中提到了它。当然,这一点更为详细


这是您所能得到的最好结果。:)您应该使用迭代器,而不是裸迭代器。但请参阅答案以获得更好的想法。@DavidConrad感谢您指出。但此函数的定义是-Iterator Iterator()。它不会应用于数组。我们如何处理这个问题?@Pankaj抱歉,它返回的列表的类型是什么?或者,换句话说,
resultList的类型是什么?您已经将
iter.next()
转换为
对象[]
,因此它必须是任一对象[]的迭代器或者其他数组类型,对吗?@DavidConrad你说得对,David。我将String.class作为导致此问题的类型传递。谢谢你指出。
for (Object[] result : resultList) {...}