2013-06-20 5 views
3

Делаю запрос с использованием нативного 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

Это лучшее, что вы можете получить. :) –

+0

Вы должны использовать Итератор , не голый Итератор. Но посмотрите ответы на лучшие идеи. –

+0

@DavidConrad Спасибо за указание. Но определение для этой функции - Итератор итератор(). Он не будет применяться к массиву. Как мы можем справиться с этим? – Pankaj

ответ

7

Один «лучший способ» (Java 5 + для-каждый) будет на самом деле переводить на то, что вы показали, используя итератор, но синтаксис лучше:

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

Другой «лучший способ» опирается на тот факт, что вы знаете размер списка и вы можете использовать счетчик в цикле:

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

чтобы подвести итог, есть несколько способов перебора по списку, но можно утверждать, что есть «лучше «Пути: это вопрос использования (если вы используете этот счетчик i для других вещей, как хорошо l или вы используете iterator, чтобы удалить некоторые элементы из списка) или просто вопрос вкуса (низкий уровень и синтаксис-сахар).

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

Смежные вопросы