将Seq [A]转换为Map [Int,Seq [A]]

时间:2014-07-04 11:54:37

标签: scala transformation

如何将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])

1 个答案:

答案 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)

除此之外,您可以使用结构类型(涉及反射,因此出于性能原因而不可取。)