scala - How do add values of selective rows from a list in an functional style? -


i solved problem in imperative style, looks ugly. how can make better (more elegant, more concise, more functional - scala). rows same values previous row, different letter should skipped, other values of rows should added.

val row1 = new row(20, "a", true)    // add value   val row2 = new row(30, "a", true)    // add value   val row3 = new row(40, "a", true)    // add value   val row4 = new row(40, "b", true)    // same value previous element & different letter -> skip row   val row5 = new row(60, "b", true)    // add value   val row6 = new row(70, "b", true)    // add value   val row7 = new row(70, "b", true)    // same value previous element, same letter -> add value    val rows = list(row1, row2, row3, row4, row5, row6, row7)    var previousletter = " "     var previousvalue  = 0.00   var countskip = 0    (row <- rows) {     if (row.value == previousvalue && row.letter != previousletter) {         row.relevant = false         countskip += 1     }     previousletter = row.letter     previousvalue  = row.value   }    // sum   val sumvalue = rows.filter(_.relevant == true).map(_.value) reduceleftoption(_ + _)   val sum = sumvalue match {       case some(d) => d       case none => 0.00   }    assert(sum == 290)   assert(countskip == 1)  

thanks in advance

twistleton

reduce it:

rows.reduceleft { (prev, curr) =>   if (prev.value == curr.value && prev.letter != curr.letter) {     curr.relevant = false     countskip += 1   }   curr } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -