Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自scala代码的Java8流_Java_Scala_Java 8_Java Stream - Fatal编程技术网

来自scala代码的Java8流

来自scala代码的Java8流,java,scala,java-8,java-stream,Java,Scala,Java 8,Java Stream,我试图使用scala代码中的Java8流,如下所示,但遇到编译错误 谢谢你的帮助 def sendRecord(record: String): Unit throws Exception bufferedReader.lines().forEach(s => sendRecord(s)) Cannot resolve forEach with such signature, expect: Consumer[_ >: String], actual: (Nothing) 附言

我试图使用scala代码中的Java8流,如下所示,但遇到编译错误

谢谢你的帮助

def sendRecord(record: String): Unit throws Exception

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

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

附言:虽然有一些迹象表明,它几乎是直截了当的,似乎不起作用。我正在运行Scala 2.11.8

您可以转换为
迭代器
来迭代
java流
,如:

import scala.collection.JavaConverters._
bufferedReader.lines().iterator.asScala.forEach(s => sendRecord(s))

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

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


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

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函数

您也可以等待scala 2.12,在这个版本中,您将不再需要该标志

更新
随着scala 2.12的推出,相关代码将正常编译。

在scala 2.12中,您可以非常轻松地使用Java流:

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)