Почему повторение повторяет список только один раз? - PullRequest
0 голосов
/ 30 января 2019

У меня есть один Бин с именем ProductBean, и у меня есть два списка, которые содержат идентификатор продукта и размер продукта.Я пытаюсь получить размер продукта на основе идентификатора, который работает нормально, но список содержит два элемента, и он дает результат только для первого элемента.Код, который я пробовал ниже - это

1002 *

1 Ответ

0 голосов
/ 30 января 2019

Вы перепутали свой Iterator itr во внутреннем цикле for.

После того, как внутренний цикл while завершился, itr завершен и больше не имеет элементов, таким образомitr.hasNext() равно false и во внешней while - так как это такая же переменная, видимая для всего кода, который вы здесь предоставили.

Лучше создайте новый итератор с более глубокой областью действияпеременная во внутреннем цикле:

// renamed itr to cartItr
// added final modifier to prevent re assignment.
final Iterator cartItr = cart.iterator();
while (cartItr.hasNext()) {
    Integer i = (Integer) cartItr.next();    
    LOG.info("Poduct Id " + i);
    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<ProductBean> citeriaQuery = builder.createQuery(ProductBean.class);
    Root<ProductBean> root = citeriaQuery.from(ProductBean.class);
    citeriaQuery.select(root);
    citeriaQuery.where(builder.equal(root.get("product_id"), i));
    Query<ProductBean> query = session.createQuery(citeriaQuery);
    productBeanList = query.list();                
    for (ProductBean productBean : productBeanList) {
        StringBuilder sb = new StringBuilder();
        sb.append(productBean.getProduct_size());
        String[] lines = sb.toString().split(", ");                    
        for (String s : lines) {                       
            // added extra iterator variable sizesItr only visible in this for-block.
            // added final modifier to prevent re assignment.
            final Iterator sizesItr = sizes.iterator();
            while (sizesItr.hasNext()) {
                Object size = (Object) sizesItr.next();                            
                if (String.valueOf(size).equals(s)) {
                    LOG.info("If condition matches " + String.valueOf(size) + " id is " + i);
                    productMap = new HashMap();
                    productMap.put("productBeanSize", String.valueOf(size));
                    productMap.put("productBean", productBean);
                    productList.add(productMap);
                }
            }
        }
    }
}
...