Xtend のチュートリアルと映画の例に従いました。このチュートリアルの最後に、次の質問があります。
@Test def void sumOfVotesOfTop2() {
val long sum = movies.sortBy[ -rating ].take(2).map[ numberOfVotes ].reduce[ a, b | a + b ]
assertEquals(47_229L, sum)
}
最初に映画を評価順に並べ替え、次に最高の 2 つを選びます。次に、マップ関数を使用して、映画のリストを numberOfVotes のリストに変換します。これで、値を追加することで単一の Long に縮小できる List ができました。
map と reduce の代わりに reduce を使用することもできます。どのようにするか知っていますか?
私の質問は次のとおりです。最後の質問に対する最良の答えは何ですか?
map() 拡張メソッドを使用せずに同じ「合計」値を計算する方法を見つけましたが、私にはひどいようです。これが私の解決策です:
assertEquals(47229, this.movies.sortBy[ -rating ].take(2).reduce[m1, m2 | new Movie('', 0, 0.0, m1.numberOfVotes + m2.numberOfVotes,null)].numberOfVotes)
それを行うためのより良い(そしてよりクリーンな)方法はありますか?