Как получить Seq [String] вместо Seq [Any]? - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно сделать следующее преобразование и columnNames должно быть Seq[String], однако это всегда Seq[Any].Как я могу решить эту задачу?

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

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Должно быть: val columnNames: Seq[String] = cols :+ "col3"

:+ - это метод для любого типа, возвращаемого someVariable.next ().

Вы получаете класс Any - кореньиерархии классов Scala.Каждый класс в среде выполнения Scala наследуется прямо или косвенно от этого класса.

0 голосов
/ 02 октября 2018

++ - бинарный оператор (метод) для двух коллекций.Но :+ или +: является оператором для добавления element к collection (collection всегда должен быть смежным с :, а element, добавляемый в коллекцию, всегда должен бытьрядом с + в :+, т. е. его следует использовать как collection :+ element или element +: collection до append или prepend от element до collection соответственно. Таким образом, cols :+"col3" будетдайте нам ожидаемый ответ, потому что тогда "col3" будет рассматриваться как string element для добавления к cols collection.

При использовании cols ++ "col3", String "col3" обрабатывается компилятором как коллекция, т. е. List('c','o','l','3'), cols - коллекция строк, поэтому результирующая коллекция - List[Any], потому что она содержит строки и символы, супертип String и Char выводится компилятором как Any.

0 голосов
/ 02 октября 2018

вы должны сделать:

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

или

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

В вашем случае результат будет Seq[Any], потому что Any является общим супертипом String и Char

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...