Scala Seq Group由未来

时间:2018-12-10 11:42:19

标签: scala scala-collections

我有2个案例类

import ConnectionManager from '../service/connectionManager'

我有一个集合(data:Seq [First])。在应用groupBy和一项未来操作之后,有一个函数可将此序列转换为另一个Seq [Second]。 getFutureInt是一些返回Future [Int]的函数

case class First(firstId: Long, pt: Long, vt: Long)
case class Second(secondId: Int, vt: Long, a: Long, b: Long, c: Long, d: Long)

有什么方法可以避免多个minBy,maxBy?

2 个答案:

答案 0 :(得分:1)

如果您为班级定义了.min,则只需.maxOrdering就可以逃脱:

 implicit val ordering = Ordering.by[First, Long](_.pt)

futures.map { case(k, v) => 
  k._2.map { si => Second(si, k._1, v.min.pt, v.max.pt, v.min.pt, v.max.pt) }
}

答案 1 :(得分:0)

您只能计算一次:

 val output: Future[Seq[Second]] = Future.sequence(data.groupBy(d => (d.vt, getFutureInt(d.firstId))).map
  {case(k, v) => k._2.map { si => {
    val minV = v.minBy(_.pt)
    val maxV = v.maxBy(_.pt)
    Second(si, k._1, minV.pt,
      maxV.pt, minV.pt, maxV.pt)
  }}}.toSeq)