我有一个对象列表[T],每个对象都有另一个对象列表[M]。我想过滤掉内部列表M给定值以进行比较。
以下是此类列表的示例:
case class People(val name: String, val pets: List[Pet])
case class Pet(val name: String, val `type`: String)
val noisyNeighbors = List(
People(
"Obelix",
List(
Pet("koko", "cat"),
Pet("kiki", "dog")
)
),
People(
"Asterix",
List(
Pet("piki", "lizard"),
Pet("poko", "dog")
)
)
)
鉴于val petTypeToRemove = "dog"
,我希望得到一个结果列表:
val lessNoisyNeighbors = List(
People(
"Obelix",
List(
Pet("koko", "cat")
)
),
People(
"Asterix",
List(
Pet("piki", "lizard")
)
)
)
我尝试过一些事情,但我真的不知道从哪里开始:
val lessNoisyNeighbors = noisyNeighbors.filter {
???
}
答案 0 :(得分:0)
在邻居的map
上调用List
,并为每个邻居替换一个已过滤掉指定类型的宠物的副本。请注意,此处没有任何内容发生变异。
val petTypeToRemove = "dog"
val lessNoisyNeighbors =
noisyNeighbors.map(n => n.copy(pets = n.pets.filterNot(_.`type` == petTypeToRemove)))
答案 1 :(得分:0)
您不想过滤邻居(来自您希望如何处理Asterix)。
HttpResponse
可能需要对其进行一些修饰(例如,尽可能保留参考平等,或者删除只有宠物可以移除的人),但这是基本的骨架。