【问题标题】:I cannot get ForEach for stream to print a list我无法让 ForEach 流打印列表
【发布时间】:2019-10-11 15:35:42
【问题描述】:

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

【问题讨论】:

  • forEach 的返回类型为 void。因此,您不能将结果(没有)分配给变量(evenNumList)。删除作业

标签: java foreach stream void


【解决方案1】:

您的代码不起作用的原因是您试图将 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));

【讨论】:

  • 我不确定将 forEach 的结果分配给列表是什么意思。我的理解是我想打印出 List 中的所有元素,每个元素都表示为 i。
  • 我已经更新了答案,因为您在我回答了最初的问题后更新了问题。您对 forEach 的理解是正确的,它应该遍历每个元素并打印,但同时,您已经在它前面加上“List evenNumList =”,这意味着您正在尝试为 evenNumList 分配一些东西,这是无效的,因为您正在运行 forEach 语句来打印元素,因此您会收到错误。
  • 你想要的和你正在做的不是一回事。您正在做的事情(即您写的内容!)正在为 evenNumList 分配一些东西,但没有什么可分配的,因为 forEach 方法没有返回任何东西。
  • 注意:如果您更改问题中的代码,则无济于事。 (如何回答不断变化的问题?)
【解决方案2】:

这里:

List <Integer> evenNumList = ...

然后

  .forEach(i -> `System.out.println(i + " "));`

您想将该流操作的“结果”分配给一个列表。 forEach() 只是迭代您的流,这根本不是您想要的。走吧:

..filter(x -> (x % 2 == 0)).collect(Collectors.asList());

这将收集你想要的所有物品。那么之后,干脆去

System.out.println(evenNumList);

例如!

还有一个小提示:不要将类型添加到变量中。例如,只需将其称为evenNumbers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多