我正在使用带有以下代码的本机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]);
}
有没有更好的方法来遍历列表?
答案 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