Создать список экземпляров класса дел

У меня есть 3 вальса, каждого типа Array[String]

все они равны по длине

val1.length == val2.length // true

Затем я создал класс case следующим образом:

case class resource(name: String, count: Int, location: String)

Я хочу создать список, List[resource] так что каждый объект этого списка создается из соответствующих элементов valс, т.е. val1, val2, val3

Что-то вроде этого:

val newList: List[resource] = (val1(0), val2(0).toInt, val3(0)),
                              (val1(1), val2(1).toInt, val3(1)),
                              ...
                              (val1(val1.length), val2(val2.length).toInt, val3(val3.length)

Я не уверен, как поступить. Я использую flatMap, foreach, for-loop или что-то еще?

Идея состоит в том, чтобы создать это выше newList и сравните его с результатом, полученным из базы данных SQL с использованием doobie.

val comparator = sql"sql statment".query[resource]
comparator.to[List].transact(xa).unsafeRunSync()

2 ответа

Решение

Вы можете сжать ваши массивы, которые объединяют соответствующие элементы сжатых последовательностей в кортежи, и их map resource.apply метод по комбинированной последовательности:

val val1: Array[String] = Array("name 1", "name 2", "name 3")
val val2: Array[String] = Array("1", "2", "3")
val val3: Array[String] = Array("loc 1", "loc 2", "loc 3")

scala> (val1, val2.map(_.toInt), val3).zipped.map(resource)
res1: Array[resource] = Array(resource(name 1,1,loc 1), resource(name 2,2,loc 2), resource(name 3,3,loc 3))

Вы можете преобразовать это Array в List если нужно:

scala> (val1, val2.map(_.toInt), val3).zipped.map(resource).toList
res2: List[resource] = List(resource(name 1,1,loc 1), resource(name 2,2,loc 2), resource(name 3,3,loc 3))

Предположим, у вас есть 3 списка, такие как

ресурс класса дела (имя: строка, число: Int, расположение: строка)

val list1 = Array("s1","s2","s3")
val list2 = Array("1","2","3")
val list3 = Array("s4","s5","s6")

Вы можете просто использовать циклы for, чтобы получить нужный список ресурсов

val result = for(
  l1 <- list1;
  l2 <- list2;
  l3 <- list3
)
  yield (resource(l1,l2.toInt,l3) )

Примечание:- Этот код будет работать, только если второй список содержит список целых чисел, иначе мы получим NumberFormatException.

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