由于旧版本的 Java 没有 Lambda,旧版本的 Scala 有一个完全不同的 Function 实现。
由于您在 ArrayList 上使用的是 Java 8 中添加的 forEach,这表明您已经在使用 Java 8 之后的 Java 版本。
在 Java 8 中引入 Lambda 之后,Scala 的更高版本有了基于 Java lambda 的 Function 实现。
现在,您的source_list 是java.util.ArrayList[Source],这意味着source_list.forEach 需要一个Consumer<? super Source> 类型的参数,该参数可以被Java lambda 替换,例如(Source s) -> { }。
您正在为它提供以下 scala 函数,
s => if(s.getPersonalDataFlg.equals("YES")){println(s.getPersonalDataID)
如果是较新的 Scala 版本,这将编译为适当的 lambda,但对于较旧的 Scala 版本会失败。
// this will work with Scala 2.12.x but fail with older versions
import java.util.ArrayList
val list = new ArrayList[Int]()
list.add(1)
list.forEach(i => println(i))
此错误表明您的 Zeppelin 笔记本正在运行旧版本的 Scala(很可能是 2.11.x 甚至 2.10.x)
对于旧版本的 Scala,您必须显式创建 Consumer 并将其传递给 forEach
import java.util.ArrayList
import java.util.function.Consumer
val list = new ArrayList[Int]()
list.add(1)
val consumer: Consumer[Int] = new Consumer[Int] {
override def accept(i: Int): Unit = println(i)
}
list.forEach(consumer)