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)
一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)
顺便说一句,contains在List中效率很低,您是否考虑过使用Set代替?
另外,请尝试遵循样式约定。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |