Конвертировать вектор в 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.