Я согласен с теми людьми, которые запрашивают дополнительную информацию о вашем случае использования. Не зная больше о данных, которые вы пытаетесь преобразовать, трудно порекомендовать краткое решение, отвечающее вашим потребностям.
Пожалуйста, обдумайте, что я хочу сказать в предварительном свете, так как я не знаю достаточно очто вы пытаетесь сделать.
Вы говорите, что выводимый вами кортеж может варьироваться. Рассматривали ли вы преобразование всего из Tuple в Vector?
Так что вместо
res17: Vector[(String, String)] = Vector((u, v),(w, x))
используйте
res17: Vector[Vector[String]] = Vector(Vector(u, v),Vector(w, x))
Вы можете легко преобразовать вектор Vector водин вектор с вызовом flatMap или flatten, который, основываясь на вашем вопросе, звучит так, как будто вы уже знаете, как это сделать.
Другое впечатление, которое я получаю от чтения вашего вопроса, заключается в том, что если вы хотите сохранить фиксированную длинусписок аргументов, который вы преобразуете из этого списка аргументов в вектор, вы можете захотеть взглянуть на классы дел вместо Tuple.
Так что вместо Tuple2
или Tuple3
определите иерархию наследования, которая позволяет компиляторудля проверки типа вашей программы.
Примерно так:
trait MyData
case class 2MemberData(data1: String, data2: String) extends MyData
case class 3MemberData(data1: String, data2: String, data3: String) extends MyData
case class 4MemberData(data1: String, data2: String, data3: String, data4: String) extends My Data
Таким образом, ваша функция может выводить значение типа Vector [MyData], которое затем выровняется с помощью сопоставления с образцом. Так что-то вроде
def processData: Vector[MyData]
def cleanUp(input: Vector[MyData]): Vector[String]
, где cleanUp реализован следующим образом:
def cleanUp(input: Vector[MyData]): Vector[String] = {
input.flatMap{ d =>
d match {
case 2MemberData(data1, data2) => Vector(data1, data2)
case 3MemberData(data1, data2, data3) => Vector(data1, data2, data3)
case 4MemberData(data1, data2, data3, data4) => Vector(data1, data2, data3, data4)
}
}
}
Я просто выкидываю идеи и не знаю, полезно ли то, что я говорю, или нет,Это действительно зависит от того, как выглядит окружающий код. Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.