2010-04-07 62 views
8
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)) 

有沒有更簡單的方法?

回答

12

你可以把它多一點簡潔的通過讓類型參數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)) 
6

雖然Ben的是正確答案,另一種會一直使用類型別名

type I3 = (Int, Int, Int) 
m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]]) 
0

結合本和oxbow_lakes的答案,你可以得到更短一點還是:

type I3 = (Int, Int, Int) 
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3] 
相關問題