在 Scala 中将 Boolean 类型转换为 Int

vas*_*eth 0 scala apache-spark

我有一个包含“一”、“二”、“三”的 ListA 我有一个包含“一”的 ListB

ListA.map(ele => ListB.contains(ele).AsInstanceOf[Int])
Run Code Online (Sandbox Code Playgroud)

但不是转换为 int 它显示错误

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

Lui*_*rez 5

asInstanceOf投是不是一个神奇的转换; 它只是告诉编译器闭嘴并相信。然后,在运行时,会引入适当的检查,如果该值不是正确类的实例,则会抛出异常。

你可能想做这样的事情:

ListA.map(ele => if (ListB.contains(ele)) 1 else 0)
Run Code Online (Sandbox Code Playgroud)

如果您发现自己在很多地方都这样做,您可以定义自己的函数:

def boolToInt(b: Boolean): Int ) if (b) 1 else 0

ListA.map(ele => boolToInt(ListB.contains(ele)))
Run Code Online (Sandbox Code Playgroud)

扩展方法

implicit class BoolOps (private val b: Boolean) extends AnyVal {
  @inline final def asInt: Int = if (b) 1 else 0
}

ListA.map(ele => ListB.contains(ele).asInt)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,containsList中效率很低,您是否考虑过使用Set代替?
另外,请尝试遵循样式约定