【问题标题】:Convert List[Any] to tuple with different type values将 List[Any] 转换为具有不同类型值的元组
【发布时间】:2017-02-17 22:31:37
【问题描述】:

我尝试将 List[Any] 转换为具有某些数据类型的元组。

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 类型

【问题讨论】:

  • 最初的用例是什么?我可以扔给你shapeless,但我不确定这是否是正确的解决方案。
  • 我尝试转换数据以便使用 slick 将其导入数据库
  • 你正试图在这里做一堆隐式转换。您的错误是,由于第一个元素是 Any,因此您不能将其强制为 Int,根据您的返回类型,返回的元组中的第一个元素必须是 Int。您可以将 conversions from Any 写入您需要的每种类型并将它们放在范围内,尽管这似乎过分了。看来您可能正在解析输入行。如果这是真的,那么您可以使用现有的marshallers

标签: scala


【解决方案1】:

你可以写

case (i1: Int) :: (i2: Int) :: // etc
  1. 如果您有许多具有不同目标元组的类似情况,您确实需要类似无形的东西(可以处理相同的元组大小)。

  2. : Option[String] 模式实际上只能检查参数是否为Option。你会收到一个警告,可以使用Option[String @unchecked] 忽略它,但只有在你确定你真的会收到Option[String] 时才应该这样做。

【讨论】:

  • @K.Palyanichka 这个解决方案实际上比我的更可取。但是您现在知道可以使用asInstanceOf 将任何值“强制”转换为另一个值:)
【解决方案2】:

您可以尝试使用x.asInstanceOf[T] 将每个值转换为其原始类型。例如x.asIntanceOf[Int] 会将任何x 转换为Int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多