【问题标题】:How to map to CaseClass in scala如何映射到scala中的案例类
【发布时间】:2021-10-12 10:41:35
【问题描述】:

我开始 scala 我有这个示例案例类

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

我有 List[OrderItem] 和 List[replaceregex] 我想将字符串替换为 list[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)

这会返回 List[Product]

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

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    这会返回一个List[Product],因为您的map 操作返回一个OrderItemNone,而这两个最接近的祖先类型是Product

    您可能希望始终在地图中返回 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
        )
      )
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多