我已成功创建以下图表:
trait VertexProperty
case class ShopperProperty(memberID: String) extends VertexProperty
case class BasketProperty(basketID: String, epochDate: Long) extends VertexProperty
val vertices: Seq[(VertexId, VertexProperty)] = Seq(
VertexId(1) -> ShopperProperty("shopper1"),
VertexId(2) -> BasketProperty("basket1", 1398900001),
VertexId(3) -> BasketProperty("basket2", 1390000000))
我的问题是,当它们是案例类时,如何过滤这些顶点属性?例如,如果我想过滤具有BasketProperty案例类作为其顶点属性的顶点,且Epoch日期大于1398900000,我该怎么做?
我一直试图使用这样的东西:
vertices.filter{case (id,classthing) => classthing.BasketProperty.epoch > 1398900000}.count
但显然不正确,因为BasketProperty不是classthing的成员。但是,我不知道如何继续。
答案 0 :(得分:1)
作为案例类,您应该能够使用.unapply()
来破坏和匹配类,因此您可以使用更完整的案例:
val filteredVertices = vertices.filter {
case (id, BasketProperty(uuid, epoch)) => epoch > 1398900000
case _ => false
}
println(filteredVertices)
打印:
List((VertexId(2),BasketProperty(basket1,1398900001)))
所以我们正确地匹配了纪元的类型和条件。请注意,我们必须添加默认的case _ => false
,因为过滤器需要一个完整的函数,它将每个值映射到true
/ false
而不是部分函数(应该有一个重载IMHO)。 / p>