2011-12-22 18 views
8

Vì vậy, ngay bây giờ tôi có một chương trình có chứa một đoạn mã mà trông như thế này ...Làm thế nào để Iterate thông qua Danh sách mảng Object

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(); 

Tôi muốn lặp results.So cảm ơn bạn trước cho bất kỳ giúp đỡ/tư vấn được cung cấp.

+0

Nếu đây là bài tập về nhà, hãy gắn thẻ như vậy. Nếu không, hãy liệt kê results = crit.list(); và sau đó cho (Sản phẩm p: kết quả) {} – Erik

Trả lời

9

Trong trường hợp này, bạn sẽ có danh sách có các thành phần i s một mảng sau đây: [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

Bạn có thể sử dụng Generic trong Danh sách và cho mỗi nhưng đối với mã hiện tại bạn có thể làm sau để lặp

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

} 

Hoặc tốt hơn để đi cho dễ đọc for-each loop

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

Hoặc có thể sử dụng trình lặp nếu bạn muốn hiện đại hơn một chút? thích cho (Iterator pi = results.iterator(); pi.hasNext();) {Product p = pi.next();} – Erik

+0

Vâng, nhưng giải pháp này là trường học cũ và công nghệ thấp! Ai không thể thích nó? – gonzobrains

+0

@gonzo yes câu trả lời hoàn toàn rất cũ, cập nhật –

2

Bạn có lẽ làm một cái gì đó như thế này:

for (Object result : results) { 
    // process each result 
} 
Các vấn đề liên quan