我通过开发订单簿模型来自学Scala,Akka和Play。我需要找到与特定类型的Ask
订单匹配的各种Ask
订单的集合(特别是优先级队列)中的第一个元素(特别是LimitOrderAsk
)
我提出的解决方案如下:
bestLimitOrderAsk = askBook find {
case ask: LimitOrderAsk => true
case _ => false
}
我是scala的新手,我不确定这是解决这个问题的惯用Scala方法。想法?
答案 0 :(得分:4)
两个选项:
askBook.collectFirst{case ask: LimitOrderAsk => ask}
或:
askBook.find(_.isInstanceOf[LimitOrderAsk])
如果您只是需要知道,如果有一些元素(具有适当的类型) - 在表达式的末尾添加.nonEmpty
:
askBook.collectFirst{case ask: LimitOrderAsk => ask}.nonEmpty
askBook.exists(_.isInstanceOf[LimitOrderAsk])
示例:
scala> List(5, null, "aaa", "bbb").find(_.isInstanceOf[String])
res30: Option[Any] = Some(aaa)
scala> List(5, null, "aaa", "bbb").collectFirst{case a: String => a}
res31: Option[String] = Some(aaa)
布尔结果:
scala> List(5, null, "aaa").find(_.isInstanceOf[String]).nonEmpty
res32: Boolean = true
scala> List(5, null).find(_.isInstanceOf[String]).nonEmpty
res33: Boolean = false