我正在尝试使用scala代码中的Java8Stream,如下所示,并坚持编译错误。
任何帮助都要感谢!!
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
发布于 2016-09-18 09:13:47
看看你在问题中链接到的文件的顶部。它提到了-Xexperimental标志。如果您使用此标志运行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函数。
您还可以等待Scala2.12,使用此版本,您将不再需要这个标志。
更新
由于Scala2.12已经退出,因此所讨论的代码只需正常编译即可。
发布于 2016-09-18 08:38:41
问题是scala中的表达式不会自动实现预期的java功能接口使用者。
有关如何解决该问题的详细信息,请参阅这些问题。在Scala2.12中,它可能在没有转换的情况下工作。
发布于 2016-12-30 21:25:35
在Scala2.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)https://stackoverflow.com/questions/39554809
复制相似问题