2014-01-08 16 views
2

列表以下是我有我的模型建立:总和物体在斯卡拉

case class Game(id: Long) 
case class GamePlayer(id: Long, gameId: Long, points: BigDecimal) 

我想获得的所有游戏的玩家点的总和。所以这里是我的尝试:

val pointTotal = allGames.toSeq.map(allGamePlayers(_.id).map(_.points)).sum 

我怎么会得到这个工作在斯卡拉?

+0

什么是' allGames'和'allGamePlayers()'的签名?并且应该'allGamePlayers()'真的把一个函数当作一个参数? –

回答

1
val pointTotal = allGames.flatMap((g: Game) => allGamePlayers(g.id).map(_.points)).sum 

你也可以使用列表理解:

val pointTotal = (for(game <- allGames; 
        player <- allGamePlayers(game.id) 
       ) yield player.points).sum 
+0

这似乎是可行的,但我仍然得到相同的错误:'缺少扩展函数的参数类型((x $ 1)=> x $ 1.id)' – goo

+0

@Jon - 我已经更新了答案,它出现了如果您指定“游戏”的类型则可以工作。 – Lee

2

猜测在这里,因为你没有指定某些类型:

val pointTotal = (
    allGames flatMap { 
    game => allGamePlayers(game.id) map (_.points) 
    } 
).sum 

注意game必须明确指定,否则编译器认为你试图通过一个lambda到allGamePlayers