0

我已成功创建以下图表:

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 的成员。但是,我不知道如何进行。

4

1 回答 1

1

作为案例类,您也应该能够使用.unapply()来破坏和匹配该类,因此您可以使用更完整的案例,如下所示:

val filteredVertices = vertices.filter {
  case (id, BasketProperty(uuid, epoch)) => epoch > 1398900000
  case _ => false
}
println(filteredVertices)

这打印:

List((VertexId(2),BasketProperty(basket1,1398900001)))

所以我们正确匹配了 epoch 的类型和条件。请注意,我们必须添加默认值case _ => false,因为 filter 需要一个完整的函数,它将每个值映射到true/false而不是部分函数(恕我直言,应该有一个重载)。

于 2015-11-01T15:39:36.520 回答