如何将map转换为集合列表,其中map键和值是该集合的字段?

时间:2019-09-19 01:31:42

标签: scala

我有一个类似

的课程
class BN {
val id: Long
val score: Option[Double]
}

还有一个map: Map[Long, Option[Double]]  我想将map转换为List[BN],其中id是键,score是值。

除了像Java一样逐步编码之外,还有其他更简便的方法吗?

2 个答案:

答案 0 :(得分:2)

您在上面声明的类是抽象的:它声明了2个 groups.LastOrDefault()?.Sub?.Add(line); 字段,但没有提供实现,没有val修饰符,该代码将无法编译。正如@Luis在评论中提到的,您很可能需要声明一个case class

abstract

答案 1 :(得分:0)

对于数据结构,您确实应该使用case classes

除了 Fenixil 的答案外,您还可以在伴随对象中添加一个构造函数,以为调用者隐藏 ugly 内容。

更改为case class

case class BN(id: Int, score: Option[Double])

不需要val,因为case classes默认是不可变

companion object中提供一个构造函数:

object BN {
  def apply(entry: (Int, Option[Double])):BN = 
     BN(entry._1, entry._2)
}

用法:

val data = Map(1->Option(1.0), 2-> Option(2.0))
data.map(BN.apply)

这会给您:List(BN(1,Some(1)), BN(2,Some(2)))