在映射Map时避免通过Erasure消除



我想映射一个类型为List[~(A,Option[B])]的map但在映射之前我先将它按a分组现在我可以映射它,我必须匹配map的Tuple:

val rawData: List[A ~ Option[B]]
rawData
    .groupBy(_._1)
    .map(case (first: A, second: Seq[A ~ Option[B]]) => 
        C(first, second.map(_._2))
    )

现在编译器警告我:

non-variable type argument anorm.~[A,Option[B]] in type pattern Seq[anorm.~[A,Option[B]]] is unchecked since it is eliminated by erasure

我找到了几个解决方案使匹配成为可能,但我有一种感觉,它也可能完全避免匹配,因为我只想遍历已经定义了类型的Map。这怎么可能呢?

在这种情况下,您实际上不必担心这个。这个错误是因为您的case语句太冗长了。改成如下:

rawData.groupBy(_._1).map(case (first, second) => 
  C(first, second.map(_._2))
)

case语句中的类型限制了元组的类型(这是不必要的)。但是,它们以一种无法在运行时验证的方式对其进行限制(由于类型擦除),这就是您得到错误的原因。

最新更新