【发布时间】:2021-01-28 00:21:17
【问题描述】:
简化场景
让我们以 2 levels 的案例类中的嵌套字段为例。
假设我有一个case class 人,如下所示:
case class Address(
name: String,
zipCodes: List[String]
)
case class Person(
name: String,
address: List[Address]
)
假设上面的 Person 类有一个object,如下所示:
val person1: Person = Person(
name = "John",
address = List(
Address(
name = "Address A",
zipCodes = List("123","345")
),
Address(
name = "Address B",
zipCodes = List("456","678")
)
)
)
现在,我想 unwind 这个对象 person1 以这样的方式得到以下元组的扁平列表:
List(
(John, Address A, 123)
(John, Address A, 345)
(John, Address B, 456)
(John, Address B, 678)
)
现在,在这个简单的场景中,我可以做如下放松:
person1.address.flatMap{
address => address.zipCodes.map{
zipCode =>
(person1.name, address.name, zipCode)
}
问题
在我的真实场景中,我可以在案例类中嵌套n levels。所以,对于我来说,为每个内部嵌套字段编写 n 行 flatMaps 来生成这样的元组是不可行的。是否有通用(如果可能),更好,更短但功能强大的方式来在 scala 中实现这一目标?
【问题讨论】:
-
你可以使用for comprehensions的语法糖,基本上就是nicer way to write those
flatMaps。
标签: java scala functional-programming