I have 2 case classes
case class First(firstId: Long, pt: Long, vt: Long) case class Second(secondId: Int, vt: Long, a: Long, b: Long, c: Long, d: Long) <
case class First(firstId: Long, pt: Long, vt: Long) case class Second(secondId: Int, vt: Long, a: Long, b: Long, c: Long, d: Long)
You could compute those only once :
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)