我想知道为什么forEach不能为我的程序工作。我想从列表中打印每个元素。
错误:类型不兼容:void无法转换为List .forEach(i-> System.out.println(i +“”));
List <Integer> evenNumList = Arrays.asList(valuesArray)
.stream()
.filter(x -> (x % 2 == 0))
.forEach(i -> `System.out.println(i + " "));`
我很困惑,为什么上面的方法不起作用,但是以下的方法起作用:
List <Integer> number = Arrays.asList(2,3,4,5);
number.stream().map(x->(x*x)).forEach(y->System.out.println(y));
答案 0 :(得分:2)
代码无法正常工作的原因是,您试图将forEach的结果分配给列表,在您的情况下,该列表是无效的。因为forEach将要运行并打印元素并且不返回任何内容,所以会出现错误。
Arrays.asList(valuesArray).stream().filter(x -> (x % 2 == 0)).forEach(i -> `System.out.println(i + " "));`
如果您修改代码并删除赋值操作,该错误就会消失。
在问题更新时进行编辑。
下面的代码起作用的原因是;
List <Integer> number = Arrays.asList(2,3,4,5); number.stream().map(x->(x*x)).forEach(y->System.out.println(y));
在第一行中,您正在将值分配给列表。
List <Integer> number = Arrays.asList(2,3,4,5);
在第二行中,既然列表已经有值,您将迭代每个值并打印。
number.stream().map(x->(x*x)).forEach(y->System.out.println(y));
答案 1 :(得分:0)
这里:
List <Integer> evenNumList = ...
然后
.forEach(i -> `System.out.println(i + " "));`
您想要将该流操作的“结果”分配给列表。 forEach()
只是迭代您的流,这根本不是您想要的。随便去吧
..filter(x -> (x % 2 == 0)).collect(Collectors.asList());
这将收集您想要的所有物品。然后随后,只需
System.out.println(evenNumList);
例如!
还有一点注意:不要将类型添加到变量中。例如,只需将其命名为evenNumbers
。