首页 文章

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

提问于
浏览
0

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

    你需要向编译器证明有一个类型 A 的参数可以满足你的条件:

    trait Param[A]{
      def extract(that: A): Int
    }
    
    def seqToMap[A](seq: Seq[A])(implicit proof: Param[A]) = 
      seq groupBy (proof.extract)
    

    除此之外,您可以使用结构类型(涉及反射,因此出于性能原因,实际上是不可取的 . )

相关问题