【问题标题】:Why stream() doesn't work from just declared Array [closed]为什么stream()不能从刚刚声明的数组中工作[关闭]
【发布时间】:2019-07-30 13:11:18
【问题描述】:

这可能很简单,但我找不到答案,为什么我不能在使用 Arrays.asList 创建列表后直接开始流。 'list' 工作正常,但 'list2' 不行,IntelliJ 没有帮助

 List<Book> list = Arrays.asList(lalka,dziady,chlopi,jutrzenka);

    list.stream()
            .map((Book var)-> var.getAuthor().getName())
            .forEach(var-> System.out.println(var));

    List<Book> list2 = Arrays.asList(lalka, dziady).stream()
            .map((Book var) -> var.getAuthor().getName())
            .forEach(var-> System.out.println(var));

【问题讨论】:

  • “不”不是错误。发生什么了?你得到什么样的错误?
  • 您正在尝试将forEach 的结果分配给一个变量。但是forEach 没有返回任何东西。
  • 文档或规范的哪一部分让您认为forEach() 应该返回List&lt;Book&gt;
  • 仅供参考: Arrays.asList(lalka, dziady).stream() 最好写成Stream.of(lalka, dziady)

标签: java arrays java-stream


【解决方案1】:

您的流管道不返回任何内容(终端操作 forEach 具有 void 返回类型),因此您不能将其分配给 List 变量。

你可以写:

Arrays.asList(lalka, dziady)
      .stream()
      .map((Book var) -> var.getAuthor().getName())
      .forEach(var-> System.out.println(var));

【讨论】:

    【解决方案2】:

    您正在尝试将.forEach 的结果分配给List&lt;Book&gt; list2 变量。 .forEach(...) 的类型为 void。 删除这个不必要的分配。

    【讨论】:

      【解决方案3】:

      问题在于对 List list2 的分配。 您可能会收到无法将 void 转换为列表的错误 因为 .forEach() 不返回任何内容。

      删除对 list2 的分配,这将编译并运行得很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2018-01-27
        • 1970-01-01
        • 2022-12-20
        • 2020-03-19
        • 1970-01-01
        相关资源
        最近更新 更多