我有一个名为ProductBean的Bean,还有两个包含产品ID和产品尺寸的列表。 Iam试图根据ID来获得产品尺寸,该ID可以正常工作,但list包含两个项目,并且仅给出第一个项目的结果。我在下面尝试过的代码是-
Iterator itr = cart.iterator();
while (itr.hasNext()) {
Integer i = (Integer) itr.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) {
itr = sizes.iterator();
while (itr.hasNext()) {
Object size = (Object) itr.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);
}
}
}
}
}
答案 0 :(得分:3)
您正在以混乱的方式在内部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);
}
}
}
}
}