我无法让ForEach的流打印列表

时间:2019-05-25 07:22:04

标签: java foreach stream void

我想知道为什么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));

2 个答案:

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