我遵循了 Xtend 教程和电影示例。在本教程的最后,您可以找到以下问题:
@Test def void sumOfVotesOfTop2() {
val long sum = movies.sortBy[ -rating ].take(2).map[ numberOfVotes ].reduce[ a, b | a + b ]
assertEquals(47_229L, sum)
}
首先,电影按评级排序,然后我们选择最好的两部电影。接下来,使用 map 函数将电影列表转换为他们的 numberOfVotes 列表。现在我们有一个列表,可以通过添加值将其简化为单个 Long。
您也可以使用 reduce 代替 map 和 reduce。你知道如何?
我的问题是:最后一个问题的最佳答案是什么?
我找到了一种不使用 map() 扩展方法来计算相同“总和”值的方法,但这对我来说似乎很糟糕。这是我的解决方案:
assertEquals(47229, this.movies.sortBy[ -rating ].take(2).reduce[m1, m2 | new Movie('', 0, 0.0, m1.numberOfVotes + m2.numberOfVotes,null)].numberOfVotes)
有没有更好(和更清洁)的方法来做到这一点?