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

Java8-如何在全局变量(lambda-forEach)中存储来自forEach的值,lambda,java-8,Lambda,Java 8,我试图使用Java8-Lambda forEach迭代ArrayList,并将值存储在全局变量中 我收到了类似于类型不匹配的错误,我也无法进行类型转换 请看下面我的代码 Long product_id = listProducts.forEach(listproducts ->listproducts.getId()); 我以前的方法:(没有JAVA8特性,现在我想使用JAVA8更改代码) SY您无法从值列表中提取单个值而不将其聚合(最大值、最小值、总和…)。在旧代码中,您始终保存产品列

我试图使用Java8-Lambda forEach迭代ArrayList,并将值存储在全局变量中

我收到了类似于
类型不匹配的错误,我也无法进行类型转换

请看下面我的代码

Long product_id = listProducts.forEach(listproducts ->listproducts.getId());
我以前的方法:(没有JAVA8特性,现在我想使用JAVA8更改代码)


SY您无法从值列表中提取单个值而不将其聚合(最大值、最小值、总和…)。在旧代码中,您始终保存产品列表的最后一个id。这是有意的吗?如果是这样,循环就没有任何意义。您只需检索最后一个元素:

Long product_id = listProducts.get(listProducts.size() - 1);
但是,如果要将产品映射到其ID列表,可以执行以下操作:

List<Long> productIds = listProducts.stream().map(prod -> prod.getId()).collect(Collectors.toList());

SY您无法从值列表中提取单个值而不将其聚合(最大值、最小值、总和…)。在旧代码中,您始终保存产品列表的最后一个id。这是有意的吗?如果是这样,循环就没有任何意义。您只需检索最后一个元素:

Long product_id = listProducts.get(listProducts.size() - 1);
但是,如果要将产品映射到其ID列表,可以执行以下操作:

List<Long> productIds = listProducts.stream().map(prod -> prod.getId()).collect(Collectors.toList());

forEach
不返回任何内容。您希望输出的具体内容是什么。您正在处理一个元素列表,并且似乎需要一个值作为输出。是的,它希望从列表中获取一个值。以前我用的是旧方法。但是,我只想用新的Java8特性转换我的代码。我也将更新我的旧代码。为什么在原始代码中使用循环?除了分配给
product\u id
的最终值之外,所有其他值都将被覆盖。您可以使用Long product\u id=listProducts.get(listProducts.size()-1).getId();为此不需要任何循环。您应该首先修复代码的逻辑错误,然后考虑使用不同的API表达实际意图。
forEach
不返回任何内容。您希望输出的具体内容是什么。您正在处理一个元素列表,并且似乎需要一个值作为输出。是的,它希望从列表中获取一个值。以前我用的是旧方法。但是,我只想用新的Java8特性转换我的代码。我也将更新我的旧代码。为什么在原始代码中使用循环?除了分配给
product\u id
的最终值之外,所有其他值都将被覆盖。您可以使用Long product\u id=listProducts.get(listProducts.size()-1).getId();为此不需要任何循环。您应该首先修复代码的逻辑错误,然后考虑使用不同的API表达实际意图。
final Long prod[] = new Long[1];
listProducts.forEach(product->{         
    prod[0] = product.getId();      
});

Long product_id = prod[0];