首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala代码中的Java 8流

scala代码中的Java 8流
EN

Stack Overflow用户
提问于 2016-09-18 06:26:57
回答 3查看 4.9K关注 0票数 3

我正在尝试使用scala代码中的Java8Stream,如下所示,并坚持编译错误。

任何帮助都要感谢!!

代码语言:javascript
复制
def sendRecord(record: String): Unit throws Exception

bufferedReader.lines().forEach(s => sendRecord(s))

Cannot resolve forEach with such signature, expect: Consumer[_ >: String], actual: (Nothing)

PS:虽然有一些迹象表明,它与https://gist.github.com/adriaanm/892d6063dd485d7dd221差不多是笔直的,但它似乎不起作用。我在运行Scala2.11.8

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-18 09:13:47

看看你在问题中链接到的文件的顶部。它提到了-Xexperimental标志。如果您使用此标志运行scala编译器或repl,scala函数将被转换为java等效项。另一种选择是手动传入java函数。

代码语言:javascript
复制
scala> java.util.stream.Stream.of("asd", "dsa").map(new java.util.function.Function[String, String] { def apply(s: String) = s + "x" }).toArray
res0: Array[Object] = Array(asdx, dsax)

您还可以创建(隐式)转换来为您包装scala函数。

您还可以等待Scala2.12,使用此版本,您将不再需要这个标志。

更新

由于Scala2.12已经退出,因此所讨论的代码只需正常编译即可。

票数 4
EN

Stack Overflow用户

发布于 2016-09-18 08:38:41

问题是scala中的表达式不会自动实现预期的java功能接口使用者。

有关如何解决该问题的详细信息,请参阅这些问题。在Scala2.12中,它可能在没有转换的情况下工作。

票数 2
EN

Stack Overflow用户

发布于 2016-12-30 21:25:35

在Scala2.12中,您可以非常容易地使用Java流:

代码语言:javascript
复制
import java.util.Arrays

val stream = Arrays.stream(Array(1, 2, 3, 4, 6, 7))
stream
  .map {
    case i: Int if i % 2 == 0 => i * 2
    case i: Int if i % 2 == 1 => i * 2 + 2
  }
  .forEach(println)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39554809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档