从嵌套的对象列表中提取对象
Extracting an object from a nested list of objects
我有一个问题,我创建了一个较小的版本。
我有一个类型为 A
的对象列表,我们称其为 L
L = List[A]
在 A
中还有另一个对象列表 B
具有 属性 X
.
收集所有具有 B
且 X
等于 V
的所有 A
L.filter(x => x.B.exists(y => y.X == V)).map(a => a.B)
来自 REPL 的示例代码
class B(val X:Int){
override def toString =
s"b:$X"
}
class A(val b: List[B]) {
override def toString =
s"a: $b"
}
val listA1 = List(new B(1), new B(2), new B(3))
val listA2 = List(new B(1), new B(7), new B(12))
val listA3 = List(new B(9), new B(5), new B(3))
val L = List(new A(listA1), new A(listA2), new A(listA3))
println(L) // List(a: List(b:1, b:2, b:3), a: List(b:1, b:7, b:12), a: List(b:9, b:5, b:3))
val res = L.filter(x => x.b.exists(y => y.X == 3)).map(a => a.b)
println(res) // List(List(b:1, b:2, b:3), List(b:9, b:5, b:3))
现在是问题 - 如何获取 X
值为 3
的 B
对象的列表?
就是如下列表
List(b:3, b:3)
在现实世界中,我需要 B
的其他属性,但首先我需要获得 B
的属性。
如果我理解你的要求,这就是你所需要的。
L.flatMap(_.b.filter(_.X == 3))
顺便说一句,您使用的 upper/lower-case 变量名称不一致、随意且令人困惑。
我有一个问题,我创建了一个较小的版本。
我有一个类型为 A
的对象列表,我们称其为 L
L = List[A]
在 A
中还有另一个对象列表 B
具有 属性 X
.
收集所有具有 B
且 X
等于 V
A
L.filter(x => x.B.exists(y => y.X == V)).map(a => a.B)
来自 REPL 的示例代码
class B(val X:Int){
override def toString =
s"b:$X"
}
class A(val b: List[B]) {
override def toString =
s"a: $b"
}
val listA1 = List(new B(1), new B(2), new B(3))
val listA2 = List(new B(1), new B(7), new B(12))
val listA3 = List(new B(9), new B(5), new B(3))
val L = List(new A(listA1), new A(listA2), new A(listA3))
println(L) // List(a: List(b:1, b:2, b:3), a: List(b:1, b:7, b:12), a: List(b:9, b:5, b:3))
val res = L.filter(x => x.b.exists(y => y.X == 3)).map(a => a.b)
println(res) // List(List(b:1, b:2, b:3), List(b:9, b:5, b:3))
现在是问题 - 如何获取 X
值为 3
的 B
对象的列表?
就是如下列表
List(b:3, b:3)
在现实世界中,我需要 B
的其他属性,但首先我需要获得 B
的属性。
如果我理解你的要求,这就是你所需要的。
L.flatMap(_.b.filter(_.X == 3))
顺便说一句,您使用的 upper/lower-case 变量名称不一致、随意且令人困惑。