Группировать по определенному столбцу - PullRequest
0 голосов
/ 24 марта 2020

Новичок в scala, с трудностями при просмотре карт и списков, это не то же самое, что java скажем, у меня есть функция scala, которая дает мне записи из базы данных в следующем формате со столбцами

id owner_id type_id name value

Давайте назовем это

case class Row(id: UUID, ownerId: UUID, typeId: UUID, name: String, value: String)

Теперь я хочу написать функцию, которая принимает эти строки в качестве входных данных и выплевывает карту в Scala, которая выглядит следующим образом: Может кто-нибудь, пожалуйста, помогите мне с функцией

{
  "owner": "ownerId",
  "configurations": {
    "type1": {
      "name1": "value1",
      "name2": "value2"
    },
    "type2": {
      "name3": "value3",
      "name4": "value4"
    }
  }
}

1 Ответ

1 голос
/ 24 марта 2020

Предполагая, что этот тип результата

case class Data(owner: UUID, configurations: Map[UUID, Map[String, String]])

Я не проверял это, но это может работать для получения поля configurations. Поскольку имеется несколько строк, я не уверен, как можно заполнить поле owner одним значением.

def convert(rows: Seq[Row]): Data =
  Data(owner = ???,
       configurations = rows.groupMapReduce(_.typeId)(r => Map(r.name -> r.value))(_ ++ _))

При этом используется функция groupMapReduce в Seq, которая будет первая группа все строки на основе typeId. Затем он сопоставит каждую строку r с Map с одной записью name до value. ++ объединит все эти маленькие Map с.

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