2016-11-10 165 views
-2

我想创建一个搜索函数,所以用户可以通过使用键值进行搜索,但是试图使用的方法返回类型不匹配,已经取出不必要的代码并显示什么是需要。我如何设定积分来接受一个I​​nt而不是“Any”?斯卡拉类型不匹配映射

“键入任何不符合类型为int”

val mapdata = readFile("data.txt") 


    def handleTwo(): Boolean = { 
    mnuShowPointsForTeam(currentPointsForTeam) 
    true 
    } 




def mnuShowPointsForTeam(f: (String) => (String, Int)) = { 
    print("Team>") 
    val data = f(readLine) 
    println(s"${data._1}: ${data._2}") 
    } 



    def currentPointsForTeam(team: String): (String, Int) = { 
    val points = mapdata.get(team) match{ 
     case Some(p) => p 
     case None => 0 
    } 
    (team, points) 
    } 

的data.txt中

SK1, 9, 7, 2, 0, 7, 3, 7, 9, 1, 2, 8, 1, 9, 6, 5, 3, 2, 2, 7, 2, 8, 5, 4, 5, 1, 6, 5, 2, 4, 1 
SK2, 0, 7, 6, 3, 3, 3, 1, 6, 9, 2, 9, 7, 8, 7, 3, 6, 3, 5, 5, 2, 9, 7, 3, 4, 6, 3, 4, 3, 4, 1 
SK4, 2, 9, 5, 7, 0, 8, 6, 6, 7, 9, 0, 1, 3, 1, 6, 0, 0, 1, 3, 8, 5, 4, 0, 9, 7, 1, 4, 5, 2, 8 
SK5, 2, 6, 8, 0, 3, 5, 5, 2, 5, 9, 4, 5, 3, 5, 7, 8, 8, 2, 5, 9, 3, 8, 6, 7, 8, 7, 4, 1, 2, 3 
SK6, 2, 7, 5, 9, 1, 9, 8, 4, 1, 7, 3, 7, 0, 8, 4, 5, 9, 2, 4, 4, 8, 7, 9, 2, 2, 7, 9, 1, 6, 9 
SK7, 6, 9, 5, 0, 0, 0, 0, 5, 8, 3, 8, 7, 1, 9, 6, 1, 5, 3, 4, 7, 9, 5, 5, 9, 1, 4, 4, 0, 2, 0 
SK8, 2, 8, 8, 3, 1, 1, 0, 8, 5, 9, 0, 3, 1, 6, 8, 7, 9, 6, 7, 7, 0, 9, 5, 2, 5, 0, 2, 1, 8, 6 
SK9, 7, 1, 8, 8, 4, 4, 2, 2, 7, 4, 0, 6, 9, 5, 5, 4, 9, 1, 8, 6, 3, 4, 8, 2, 7, 9, 7, 2, 6, 6 
+0

mapData是什么类型的? “mnuShowPointsForTeam”的返回值是什么(现在只是printlns)? – Thilo

+0

更新了这个问题,mapdata是一个外部txt文件,是的,它只是printlns团队多数民众赞成密钥值输入@Thilo –

+0

但是什么是'mapData'类型?它是“Map [String,Any]”吗?如果你不能创建'Map [String,Int]',那么你必须在这个'case Some(p)'部分内部转换/转换为Int。 – Thilo

回答

3

它看起来像你想返回一个元组与List[Int],而不仅仅是一个单一Int

如果是这样

def currentPointsForTeam(team: String): (String, List[Int]) = 
    (team, mapdata.get(team).getOrElse(List.empty)) 
    // Or maybe List(0) instead of List.empty 

如果你想返回一个Int,你说如何从List[Int]走在映射到单一值。也许是一笔?

def currentPointsForTeam(team: String): (String, Int) = 
    (team, mapdata.get(team).map(_.sum).getOrElse(0)) 
+0

指甲的头,这正是我想要实现的!谢谢 –

+0

第一个例子工作得很好,但第二个接受一个String Int而不是一个String List int,这将如何工作?只是测试它,我得到一个类型不匹配@Thilo –

+0

忽略最后的评论,在我想到之前键入!这就是现在的工作,再次感谢 –