У меня второй вечер scala, и я сопротивляюсь желанию писать вещи в scala, как я делал это в java и пытаюсь выучить все идиомы. В этом случае я просто рассчитываю среднее значение, используя такие вещи, как замыкания, отображение и, возможно, понимание списка. Независимо от того, является ли это наилучшим способом вычисления среднего значения, я просто хочу знать, как делать эти вещи в Scala только для учебных целей
Вот пример: усредненный метод, приведенный ниже, практически не реализован. У меня есть пара других методов для поиска рейтинга, который дал отдельный идентификатор пользователя, который использует метод find из TraversableLike (я думаю), но на самом деле ничего более специфичного для scala. Как бы я вычислил среднее значение для заданного List [RatingEvent], где RatingEvent.rating - это двойное значение, которое я бы вычислял в среднем по всем значениям этого Списка в форме, подобной скале?.
package com.brinksys.liftnex.model
class Movie(val id : Int, val ratingEvents : List[RatingEvent]) {
def getRatingByUser(userId : Int) : Int = {
return getRatingEventByUserId(userId).rating
}
def getRatingEventByUserId(userId : Int) : RatingEvent = {
var result = ratingEvents find {e => e.userId == userId }
return result.get
}
def average() : Double = {
/*
fill in the blanks where an average of all ratingEvent.rating values is expected
*/
return 3.8
}
}
Как опытный специалист по scala может заполнить этот метод и использовать возможности scala, чтобы сделать его максимально кратким? Я знаю, как бы это сделать в Java, чего я хочу избежать.
Если бы я делал это на python, я предполагаю, что самый питонический способ был бы:
sum([re.rating. for re in ratingEvents]) / len(ratingEvents)
или если бы я заставлял себя использовать замыкание (что я, по крайней мере, хочу изучить в scala):
reduce(lambda x, y : x + y, [re.rating for re in ratingEvents]) / len(ratingEvents)
Это использование таких вещей, которым я хочу научиться в Scala.
Ваши предложения? Любые указатели на хорошие учебники / справочные материалы, относящиеся к этому, приветствуются: D