首页 > 解决方案 > Scala Seq GroupBy 与 Future

问题描述

我有 2 个案例课程

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

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

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

有什么办法可以避免多个 minBy、maxBy?

标签: scalascala-collections

解决方案


你可以逃脱 just .min.max如果你Ordering为你的班级定义一个:

 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) }
}

推荐阅读