创建案例类实例列表

时间:2018-05-02 11:59:34

标签: scala loops comparison doobie

我有3个val,每个都是[ele for ele in soup('a') if ele.text == 'Australia']

类型

它们的长度相等

val1.length == val2.length // true

接下来,我创建了一个案例类如下:

Array[String]

我想创建一个列表case class resource(name: String, count: Int, location: String) ,使得此列表的每个对象都是从List[resource]的相应元素创建的,即val,{{1} },val1

这样的事情:

val2

我不知道该怎么办。我是否使用flatMap,foreach,for-loops或其他东西?

我们的想法是创建上面提到的val3并将其与使用doobie从SQL数据库获得的结果进行比较。

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)

2 个答案:

答案 0 :(得分:3)

您可以压缩数组,它将压缩序列的相应元素组合成元组,并在合并序列中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))

答案 1 :(得分:1)

让我们假设您有3个列表,例如

案例类资源(name:String,count:Int,location:String)

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。