Scala Seq GroupBy 与 Future [英] Scala Seq GroupBy with Future

查看:48
本文介绍了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 和一个 future 操作之后,有一个函数可以将此序列转换为另一个 Seq[Second].getFutureInt 是一些函数返回 Future[Int]

I have one collection (data:Seq[First]). There is one function which transforms this sequence to another Seq[Second] after applying groupBy and one future operation. getFutureInt is some function returns 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?

Is there any way to avoid multiple minBy, maxBy?

推荐答案

如果你定义了 ,你可以只使用 .min.max为您的班级订购:

You can get away with just .min, and .max if you define an Ordering for your class:

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

这篇关于Scala Seq GroupBy 与 Future的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆