Scala 将列表[Any]转换为具有不同类型值的元组
我正在尝试用一些数据类型将List[Any]转换为tupleScala 将列表[Any]转换为具有不同类型值的元组,scala,Scala,我正在尝试用一些数据类型将List[Any]转换为tuple def matchValue(list: List[Any]):(Int, Int, Int, Option[String], String,Option[Date],String, Date,String, Option[Int],Option[String])= { list match { case i1::i2::i3::i4::i5::i6::i7::i8::i9::i10::i11 =>
def matchValue(list: List[Any]):(Int, Int, Int, Option[String], String,Option[Date],String, Date,String, Option[Int],Option[String])= {
list match {
case i1::i2::i3::i4::i5::i6::i7::i8::i9::i10::i11 => (i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
}
}
但我有一个错误:
Any类型的表达式不符合预期的Int类型
你可以写
case (i1: Int) :: (i2: Int) :: // etc
:Option[String]
模式实际上只能检查参数是否为选项。您将得到一个关于此的警告,可以通过使用选项[String@unchecked]
忽略该警告,但只有在您确定确实会得到选项[String]
时,才应该这样做
您可以尝试使用
x.asInstanceOf[T]
将每个值转换为其基本类型。例如,x.asintenceof[Int]
将任何x
转换为Int
初始用例是什么?我可以扔给你,但我不确定这是否是正确的解决方案。我尝试转换数据,以便使用Slick将其导入db。你尝试在这里进行一系列隐式转换。您的错误是,由于第一个元素是Any,您不能将其强制为Int,根据您的返回类型,返回的元组中的第一个元素必须是Int。您可以从任何类型写入所需的每种类型,并将它们放在范围内,尽管这似乎有些过分。看起来您可能正在解析输入行。如果这是真的,那么你可以使用现有的@K.Palyanichka这个解决方案实际上比我的更可取。但您现在知道,您可以使用asInstanceOf
:)将任何值“强制”转换为另一个值