java - Jupyter Scala 笔记本无法识别使用 Java 列表的 Scala 匿名函数

标签 java scala jupyter-notebook anonymous-function

我认为我的 Jupyter/Scala 设置中有一些配置错误,但我在诊断问题时遇到了很多麻烦。 这是我尝试通过新的 docker 镜像 (beakerx/beakerx) 和新的内核运行的代码:

import java.util.Arrays
var original = Arrays.asList("hello", "world", "war")
original.stream().map(_.toUpperCase()).forEach(wat => println(wat))

这通过 REPL 工作得很好,但是当我通过 Jupyter 运行时,我收到此错误:

<console>:91: error: missing parameter type for expanded function ((x$1) => x$1.toUpperCase())
   original.stream().map(_.toUpperCase()).forEach(wat => println(wat))

我还尝试用 n => n.toUpperCase() 替换 _.toUpperCase(),但得到了同样的错误。使用 (n:String) => n.toUpperCase() 会产生相关错误:

<console>:92: error: type mismatch;
found   : String => String
required: java.util.function.Function[_ >: String, _]
   original.stream().map((n:String) => n.toUpperCase()).forEach(wat => println(wat))

跳过流也会失败:

java.util.Arrays.asList("a", "b", "c").map(_.toUpperCase())

产量

<console>:89: error: value map is not a member of java.util.List[String]
   java.util.Arrays.asList("a", "b", "c").map(_.toUpperCase())

以下是“帮助”选项卡中的“当前内核信息”:

BeakerX 1.0.0
Scala 2.11.12
hash 99cb191
build time 2018-07-05 19:22 UTC

最佳答案

正如错误所示:“值映射不是 java.util.List[String] 的成员”,您无法将映射应用于 java.util.List[String]

您需要将 java.util.List[String] 转换为 scala 集合。

添加此:

import scala.collection.JavaConversions._

然后您就可以运行代码而不会出现错误:

java.util.Arrays.asList("a", "b", "c").map(_.toUpperCase())

将产生:scala.collection.mutable.Buffer[String] = ArrayBuffer(A, B, C)

关于java - Jupyter Scala 笔记本无法识别使用 Java 列表的 Scala 匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675379/

相关文章:

java - 在 Glassfish 下运行多个 Grails 应用程序时出错

scala - Scala 中的特征和抽象方法重写

css - Liftweb 菜单定制

python - ImageScraper 不工作

python - 如何根据大小更改列值

python - Pandas 风格背景渐变未显示在 jupyter 笔记本中

java - 在 Android 应用程序中调用 java 客户端

java - DelimitedLineTokenizer 制表符

java - RuntimeException:Web 浏览器中的 InspirationTargetException

scala - 从Groovy调用Scala:如何处理不同的集合类型?