type将boolean转换为int

1szpjjfi  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(360)

我有一个包含“一”、“二”、“三”的列表,我有一个包含“一”的列表

ListA.map(ele => ListB.contains(ele).AsInstanceOf[Int])

但不是转换成int,而是显示错误

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Integer
o4tp2gmn

o4tp2gmn1#

您还可以使用以下简单代码:

val ListA=List("one","two","three")
  val ListB=List("one")

  val result : Int = if(ListA exists ListB.contains) 1 else 0
1u4esq0p

1u4esq0p2#

asInstanceOf 施法不是魔法转换;它只是告诉编译器闭嘴相信。然后,在运行时引入适当的检查,如果值不是正确类的示例,它将抛出异常。
你可能想这样做:

ListA.map(ele => if (ListB.contains(ele)) 1 else 0)

如果您发现自己在许多地方都这样做,您可以定义自己的功能:

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

ListA.map(ele => boolToInt(ListB.contains(ele)))

或扩展方法:

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)

顺便说一句, contains 在列表中是相当低效的,你们考虑过用集合代替吗?
另外,尽量遵循风格惯例。

相关问题