Rajeun
Rajeun

Reputation: 721

Calculate average in scala

I'm getting a session from database which content result which content dimensions, now I'm trying to calculate average for dimensions:

sessionService.findById(sessionId).map {
  case Some(session) =>
    val result = session.result.getOrElse(Seq.empty)
    for (dimension <- result.dimensions) {
      var test += dimension.average
    }

    Ok(Json.toJson(session)).as("application/json")
  case None => NotFound(Json.toJson("Not found"))

}

but I get this error : enter image description here

UPDATE :

When trying

var test = 0
for (dimension <- result.dimensions) {
  test += dimension.average
}

I get this error:

enter image description here

Upvotes: 2

Views: 2381

Answers (1)

Gabriele Petronella
Gabriele Petronella

Reputation: 108111

var test += dimension.average

is invalid syntax. You can't simultaneously declare and increase a variable... well it just doesn't make sense.

You probably meant something like

var test = 0
for (dimension <- result.dimensions) {
  test += dimension.average
}

By the way, have you considered a different, more functional approach?

val test = result.dimensions.reduce(_ + _.average)

About the update, the problem is with getOrElse(Seq.empty)

You can try something like

sessionService.findById(sessionId).map {

  case Some(Session(_, _, Some(result), _)) =>
    result.dimensions.reduce { case (avg, d) => avg + d.average }

  case None =>
    NotFound(Json.toJson("Not found"))

}

Upvotes: 2

Related Questions