scala - 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?
解决方案
你可以逃脱 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) }
}
推荐阅读
- node.js - 推送被拒绝,在 heroku 中部署时无法编译 Node.js 应用程序
- wordpress - WooCommerce (4.8.0) WordPress (5.6) 不保存可变产品的 SKU 值
- kubernetes - Kubernetes:全 Master 集群的缺点
- php - 在 laravel 中连接远程 REDIS 服务器
- vue.js - 缺少依赖项:./node_modules/node-pre-gyp/lib/info.js 中的 aws-sdk
- java - Android 上的 Fortify 问题:动态代码评估:不安全的反序列化
- java - 没有静态方法 encodeBase64String([B)Ljava/lang/String; 在 Lorg/apache/commons/codec/binary/Base64 类中;或其超类
- c - 如何在 _start 中使用 argv?
- c# - 来自 API 的 JsonConvert.DeserializeObject 对象,使用 Webclient 可能是 2 种对象类型之一
- python - 如何让程序在 Python 中完成后重新运行