我有一个嵌套case
类结构List
为简单起见,将使用以下示例 -
case class Address(street: String, city: String, state: String, zipCode: Int)
case class Person(firstName: String, lastName: String, addresses: List[Address])
case class Department(people: List[Person])
说有List[Department]
;List[Department]
现在,如果我想通过过滤Address
每个Person
没有特定zipCode
值的内容来创建一个新的;传统上我们可以做以下
def filterPersonsByAddress(dlist: List[Department]): List[Department] = {
dlist.map { d =>
val people = d.people.map { p =>
p.copy(addresses = p.addresses.filterNot(_.zipCode == 38978))}
d.copy(people=people)
}
}
这种方法性能不高,因为取决于嵌套级别,它可以是 Big O(n^2) 或 Big O(n^3) ;
我正在尝试通过Monocle学习镜头。到目前为止,我所了解到的是,当您必须“修改”深度嵌套的case
类结构但尚未找到一种方法来根据条件“切断”嵌套结构的某些部分并返回新结构时,Lenses 很有用。这可能通过 Monocle 实现吗?另外我不确定 Lenses 是否也能帮助实现更好的 Big O 时间?