简短的方式来打破特定的集合类型?
问题描述:
scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)
scala> m.map{case (a, b) => (a+ 1, a+2, a+3)}
res42: scala.collection.immutable.Iterable[(Int, Int, Int)] = List((2,3,4))
我想要的是结果类型为List [(Int,Int,Int)]。我发现的唯一方法是:简短的方式来打破特定的集合类型?
scala> m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], (Int, Int, Int), List[(Int, Int, Int)]])
res43: List[(Int, Int, Int)] = List((2,3,4))
有没有更简单的方法?
答
你可以把它多一点简洁的通过让类型参数breakOut
从返回类型推断:
scala> m.map{case (a, b) => (a+1, a+2, a+3)}(breakOut) : List[(Int, Int, Int)]
res3: List[(Int, Int, Int)] = List((2,3,4))
答
虽然Ben的是正确答案,另一种会一直使用类型别名:
type I3 = (Int, Int, Int)
m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]])
答
结合本和oxbow_lakes的答案,你可以得到更短一点还是:
type I3 = (Int, Int, Int)
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3]