2016-03-05 120 views
1

應用在Scala中,我有一個類型的方法:地圖不正確

HashMap[String, String] 

而且這個變量:

var bestMatch = new HashMap[String, (String, Int)] 

在方法的結束,我想返回該值:

bestMatch.map((x, (y, count)) => (x, y)) 

不過,我得到的錯誤:

Cannot resolve reference map with such signature 

爲什麼我錯誤地應用它?

回答

3

應該是這樣的:

bestMatch.map(tuple => (tuple._1, tuple._2._1)) 

你不能只是把(String,Int)元組的兩個參數作爲lambda函數的參數。你需要使用這個元組作爲一個元組。如果你寫出你的參數類型,它可能會變得更清晰。

bestMatch.map((tuple: (String,(String,Int))) => (tuple._1, tuple._2._1)) 

另外,在你的情況下,可以更好地使用mapValues因爲你沒有做你的關鍵事情。那麼你可以使用這個:

bestMatch.mapValues(tuple => tuple._1) 

如果你問我,這更可讀。你甚至可以更進一步說:

bestMatch.mapValues(_._1) 
3

你可以寫

bestMatch map {case (x, (y, count)) => (x, y)}