如何将Seq [A]转换为Scala中的Map [Int,Seq [A]],其中Int的值是A的一个参数(以函数方式)?
示例:
val futures: Seq[Future[Seq[A]]] = ???
val gathered = Future.collect(futures)
gathered.map {
res => {
val myseq:Seq[A] = res.flatten
myseq.map(a => (a.param, a)).toMap
}
}
结果值为Map [Int,A]。相反,我希望所有A的序列具有相同的Int参数(Map [Int,Seq [A])
答案 0 :(得分:0)
您需要向编译器证明有一个类型为A
的参数可以满足您的条件:
trait Param[A]{
def extract(that: A): Int
}
def seqToMap[A](seq: Seq[A])(implicit proof: Param[A]) =
seq groupBy (proof.extract)
除此之外,您可以使用结构类型(涉及反射,因此出于性能原因而不可取。)