scala - 如何在scala中映射到CaseClass
问题描述
我开始 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] 吗?或者这个我的代码是不好的解决方案你能告诉我请我开始吗
解决方案
这将返回 a List[Product]
,因为您的map
操作返回 aOrderItem
或 a None
,而这 2 最接近的祖先类型是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
)
)
推荐阅读
- amazon-web-services - AWS VPN:无法使用 EC2 实例 ping 客户端
- javascript - 针对不同架构的 React 本机发布版本创建 4 个 apk
- javascript - 用于传递除字符列表之外的所有字符的正则表达式
- android - 如何在 Room 中映射 NUMERIC SQLite 类型?
- cors - 我该如何解决,XMLHttpRequest
- java - 在 FileNet ContentEngine 中搜索文件夹并检索其类
- c# - 以编程方式在 vsdx 文件中创建/操作 visio 绘图
- r - R,层次聚类标签?
- wordpress - 有人知道这种滑块吗?
- intellij-idea - 如何获取 Kotlin IntelliJ 暂存文件的输出?