Конвертировать вектор в Tuple Scala

Можно ли преобразовать вектор разнородных векторов в список Tuple3 в Scala?

т.е.

Vector(Vector(1,"a","b"),Vector(2,"b","c")) to List(Tuple3(1,"a","b"),Tuple3(2,"b","c"))

1 ответ

Решение

Явно конвертировать каждый внутренний Vector в Tuple3:

vector.map {
    case Vector(f, s, t) => Tuple3(f, s, t)
}.toList

Если у вас есть векторы с переменным размером, вы можете использовать более общий подход:

def toTuple(seq: Seq[_]): Product = {
  val clz = Class.forName("scala.Tuple" + seq.size)
  clz.getConstructors()(0).newInstance(seq.map(_.asInstanceOf[AnyRef]): _*).asInstanceOf[Product]
}

vector.map(toTuple).toList

Но у него есть ограничение: максимальная длина векторов равна 22.

Другие вопросы по тегам