尝试使用Java 8 - Lambda forEach迭代ArrayList并将值存储在全局变量中。
我得到的错误如type mis-match
,我也无法进行类型转换。
请参阅下面的代码。
Long product_id = listProducts.forEach(listproducts ->listproducts.getId());
我以前的方法:(没有JAVA8功能,现在我想用Java8改变我的代码)
for(Product prod : listProducts)
{
product_id=prod.getId();
}
答案 0 :(得分:1)
你不能从值列表中提取单个值而不将其聚合(max,min,sum,...)。在旧代码中,您始终保存产品列表的最后一个ID。这是有意的吗?如果是这样,循环没有任何意义。您可以只检索最后一个元素:
Long product_id = listProducts.get(listProducts.size() - 1);
但是,如果您想将产品映射到其ID列表,您可以执行以下操作:
List<Long> productIds = listProducts.stream().map(prod -> prod.getId()).collect(Collectors.toList());
<强>更新强>
或者获取单个ID(如果列表为空,则productId为null):
Long productId = listProducts.stream().map(prod -> prod.getId()).reduce((id1, id2) -> id2).orElse(null);
答案 1 :(得分:0)
final Long prod[] = new Long[1];
listProducts.forEach(product->{
prod[0] = product.getId();
});
Long product_id = prod[0];