【问题标题】:How to get Seq[String] instead of Seq[Any]?如何获取 Seq[String] 而不是 Seq[Any]?
【发布时间】:2018-10-02 11:45:45
【问题描述】:

我需要进行以下转换,columnNames 应该是Seq[String],但它始终是Seq[Any]。 我该如何解决这个任务?

val cols = Seq("col1","col2")
val columnNames: Seq[String] = cols ++ "col3"

【问题讨论】:

    标签: scala collections


    【解决方案1】:

    ++ 是两个集合上的二元运算符(方法)。但是:++: 是将element 添加到collection 的运算符(collection 应始终与: 相邻,而要添加到集合中的element 应始终为与:+中的+相邻,即,它应该分别用作collection :+ elementelement +: collectionappendprependelementcollection。所以,cols :+"col3"将给我们预期的答案,因为这样"col3" 将被视为string element 添加到cols collection

    在使用 cols ++ "col3" 时,String "col3" 被编译器视为一个集合,即,List('c','o','l','3'), cols 是一个字符串集合。因此生成的集合是List[Any],因为它包含字符串和字符,所以StringChar 的超类型被编译器推断为Any

    【讨论】:

      【解决方案2】:

      你应该这样做:

      val columnNames: Seq[String] = cols :+ "col3"
      

      val columnNames: Seq[String] = cols ++ Seq("col3")
      

      在您的情况下,结果是Seq[Any],因为AnyStringChar 的通用超类型

      【讨论】:

      • 宁可“...因为 Any 是 StringChar 的常见超类型”
      • 有什么办法可以从 Seq("col1","col2","col3") 中排除 col3 吗?
      • @ScalaBoy 请打开一个新问题来询问
      【解决方案3】:

      应该是: val columnNames: Seq[String] = cols :+ "col3"

      :+ 是 someVariable.next() 返回的任何类型的方法。

      你得到 Class Any 是 Scala 类层次结构的根。 Scala 执行环境中的每个类都直接或间接继承自此类。

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        相关资源
        最近更新 更多