按时间组合scala案例类列表并构造新的案例类列表

按时间组合scala案例类列表并构造新的案例类列表,scala,collections,Scala,Collections,我有一个方法返回Future[List[ImageMetadata]]和Future[List[ObjectMetadata]];我想通过ImageMetadata和ObjectMetadata中的time字段来组合这两个列表,并想构建Future[List[ImageTypeMetadata] 在这方面我能有最好的选择吗?以下是如何在没有未来的情况下合并两个系列: 因为我的Scala缺少DateTime,但我总是需要具体的示例进行测试,所以我将DateTime重新定义为字符串。您不会使用该类型

我有一个方法返回
Future[List[ImageMetadata]]
Future[List[ObjectMetadata]]
;我想通过
ImageMetadata
ObjectMetadata
中的
time
字段来组合这两个列表,并想构建
Future[List[ImageTypeMetadata]


在这方面我能有最好的选择吗?

以下是如何在没有未来的情况下合并两个系列:

因为我的Scala缺少DateTime,但我总是需要具体的示例进行测试,所以我将DateTime重新定义为字符串。您不会使用该类型声明。:)


你试了什么?怎么搞的?你以为会发生什么?什么是DateTime,import…?解释一下你被困在哪里?你说的“我能在这方面有最好的选择吗?”是指同时等待所有的期货,然后合并列表,还是其中一个期货正在推动这一过程?
DateTime
is
import org.joda.time.DateTime
。为了简化我的问题,我正在寻找如何结合
List[ImageMetadata]
List[ObjectMetadata]
来构建
List[ImageTypeMetadata]
。需要关于我可以使用哪些列表函数的建议吗?还不完全清楚您所说的“按
时间
组合两个列表”是什么意思。假设您有一个由3个
ImageMetadata
组成的
列表
,它们都具有相同的
时间
值。假设您有一个
列表
,共有2个
ObjectMetadata
,两者的
时间
与第一个列表相同。这些应该如何结合?结果会是一个包含六个
ImageTypeMetadata
元素的列表吗?假设两个列表中没有匹配的
time
成员?结果会是一个空列表吗?具有预期结果的示例数据将有所帮助。
trait MetaData {
    def time:DateTime
}

case class ImageMetadata(time: DateTime, name: String) extends MetaData
case class ObjectMetadata(time: DateTime, tags: List[String]) extends MetaData
case class ImageTypeMetadata(time: DateTime, name: String, tags: List[String])
type DateTime=String

val la = List (ImageMetadata("12", "im 1 foo"), ImageMetadata ("13", "im 2 bar"), ImageMetadata ("23", "im 3 bar"))
val lb = List (ObjectMetadata("23", List ("o", "1")), ObjectMetadata ("12", List("o", "2")), ObjectMetadata ("17", List("o", "3")))

for (i <- la;
     o <- lb;
     if (i.time == o.time)) yield { ImageTypeMetadata (i.time, i.name, o.tags)}

res12: List[ImageTypeMetadata] = List(ImageTypeMetadata(12,im 1 foo,List(o, 2)), ImageTypeMetadata(23,im 3 bar,List(o, 1)))
type DateTime=String

sealed trait MetaData {
    def time:DateTime
}
case class ImageMetadata (time: DateTime, name: String) extends MetaData
case class ObjectMetadata (time: DateTime, tags: List[String]) extends MetaData
case class ImageTypeMetadata (time: DateTime, name: String, tags: List[String])

val la = List (ImageMetadata("12", "im 1 foo"), ImageMetadata ("13", "im 2 bar"), ImageMetadata ("23", "im 3 bar"))
val lb = List (ObjectMetadata("23", List ("o", "1")), ObjectMetadata ("12", List("o", "2")), ObjectMetadata ("17", List("o", "3")))

import concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val flim : Future [List [ImageMetadata]] = Future (la)
val flom : Future [List [ObjectMetadata]] = Future (lb)
flim.map (_.map (im => flom.map (_.map (om => {if (im.time == om.time)  Future (ImageTypeMetadata (im.time, im.name, om.tags))}))))