2011-12-22 2 views
8

Так что сейчас у меня есть программа, содержащая фрагмент кода, который выглядит следующим образом ...Как Перебрать Список массивов объектов

Criteria crit = session.createCriteria(Product.class); 
ProjectionList projList = Projections.projectionList(); 
projList.add(Projections.max("price")); 
projList.add(Projections.min("price")); 
projList.add(Projections.countDistinct("description")); 
crit.setProjection(projList); 
List results = crit.list(); 

Я хочу итерацию results.So спасибо заранее за любой помощь/советы, которые предлагаются.

+0

Если это школьная бирка, то она как таковая. В противном случае, List results = crit.list(); а затем для (Product p: results) {} – Erik

ответ

9

В этом случае у вас будет список элементов i s массив из следующего: [maxPrice, minPrice, count].

.... 
List<Object[]> results = crit.list(); 

for (Object[] result : results) { 
    Integer maxPrice = (Integer)result[0]; 
    Integer minPrice = (Integer)result[1]; 
    Long count = (Long)result[2]; 
} 
5

Вы можете использовать Generic в списке и для каждого, но для текущего кода, который вы могли бы сделать следующую итерацию

for(int i = 0 ; i < results.size() ; i++){ 
Foo foo = (Foo) results.get(i); 

} 

Или лучше пойти на читаемый для-каждого цикла

for(Foo foo: listOfFoos){ 
    // access foo here 
} 
+0

Или, может быть, использовать итератор, если хотите быть немного более современным? как для (Итератор pi = results.iterator(); pi.hasNext();) {Продукт p = pi.next();} – Erik

+0

Да, но это решение - старая школа и низкотехнологичные! Кому это не понравится? – gonzobrains

+0

@ gonzo да совсем старый ответ, обновлено –

2

Вы, вероятно, что-то вроде этого:

for (Object result : results) { 
    // process each result 
} 
Смежные вопросы