如何映射到 Scala 中的案例类

How to map to CaseClass in scala

我正在开始使用 scala 我有这个示例 class

case class OrderItem(title: String,price: Long,quantity:Int,cover:Option[String],detailJson: String)

我有 List[OrderItem] 和 List[replaceregex] 我想将字符串替换为列表[Orderitem],我这样做

val s = OrderItem.flatMap(a => target.map (
      b =>
        if (a.detailJson.contains(start + "\"" + b.unit+ "\""))
          OrderItem(
            a.title,
            a.price,
            a.quantity,
            a.cover,
            a.detailJson.replaceFirst(startregex + b.unit, b.unitreplace))
        else None
      )).filter(_ != None)

和这个return列表[产品]

我可以从地图上列出 [Orderitem] 吗? 或者我的代码是不好的解决方案你能告诉我吗我要开始了

这个 return 是一个 List[Product] 因为你的 map 操作 return 是一个 OrderItem 或一个 None 并且最近的祖先这 2 个的类型是 Product.

您可能希望在您的地图中始终 return 一个 Option[OrderItem],然后仅保留定义的项目,这要归功于 collect:

val s = orderItem
  .flatMap(a =>
    target.map( b =>
      if (...)
        Some(OrderItem(...)))
      else
        None
    )
    .collect { case Some(o) => o }
  )

但是等等,因为 Option 扩展了 Seq 你实际上可以只使用 flatMap 并像这样删除 collect

val s = orderItem
  .flatMap(a =>
    target.flatMap(b =>
      if (...)
        Some(OrderItem(...)))
      else
        None
    )
  )