Java8 - 如何在全局变量(lambda forEach)中存储来自forEach的值

时间:2018-01-09 10:06:58

标签: lambda java-8

尝试使用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();
        }

2 个答案:

答案 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];