Принять список имен таблиц и имени столбца в scala и вернуть добавленный префикс для значений столбца
Aug 21 2020
Я хочу получить информацию от пользователя в форме ниже. В этой строке может быть n
число table_name
и column_name
.
Структура ввода:
input="tablename_1:column_name|tablename_2:column_name,tablename_1:column_name|tablename_2:column_name,tablename_1:column_name|tablename_3:column_name"
Реальный пример:
input="customer:name|customer_tmp:name,customer:period|account:period,customer:id|balance:balance_id"
Логика, которую хочу реализовать:
- Для table_name
customer_tmp
добавьте суффиксpm_
перед столбцом (имя в примере). - Для table_name
account
добавьте суффиксacct_
перед столбцом (например, точка). - Для table_name
balance
добавьте суффиксbal_
перед столбцом (например, balance_id).
Требуемый вывод для примера ввода:
return_value="name|pm_name,period|acct_period,id|bal_balance_id"
Как сделать этот код максимально универсальным?
Ответы
Shaido Aug 21 2020 at 10:00
Одним из возможных решений было бы сначала разделить входную строку на список кортежей:
val split_input = input.split(",")
.map(_.split("\\|").map(_.split(":")))
.map(v => (v(1)(0), v(0)(1), v(1)(1)))
Печать с foreach(println)
дает:
(customer_tmp,name,name)
(account,period,period)
(balance,id,balance_id)
Затем мы сохраняем желаемую логику в a, Map
чтобы ее можно было легко изменить:
val prefix_logic = Map("customer_tmp" -> "pm_", "account" -> "acct_", "balance" -> "bal_")
Теперь мы можем применить логику и создать финальную строку:
val split_output = split_input.map(v => (v._2, prefix_logic.get(v._1).get + v._3))
val return_value = split_output.map(v => v._1 + "|" + v._2).mkString(",")
Результат:
name|pm_name,period|acct_period,id|bal_balance_id