scala - Order class by field -


i have created class path should uniquely identifiable occupation , last.

case class path(occupation: bitset, last: int) {       var cost = 0       def setcost(cost: int) {           this.cost = cost       }        def getcost(): int = {           return cost       }   } } 

also, sortable count, made field.

implicit val pathord = ordering.by((p: path) => p.getcost) 

the problem when sorting it(as can see in line above), java.lang.nullpointerexception on line.

why happening? can store data better?

your code gives no exceptions me using code:

@ class path(occupation: bitset, last: int) {         var cost = 0         def setcost(cost: int) {             this.cost = cost         }          def getcost(): int = {             return cost         }     } defined class path @ list(new path(bitset(), 3)) res6: list[path] = list(cmd5$path@3ef8de39) @ implicit val pathord = ordering.by((p: path) => p.getcost) pathord: ordering[path] = scala.math.ordering$$anon$9@5f478e42 @ res6.sorted res9: list[path] = list(cmd5$path@3ef8de39) 

you missing val occupation , last

class path(val occupation: bitset, val last: int) 

i suggest create case class

case class path(occupation: bitset, last: int) 

it have equals, , hashcode based on it's fields, tostring, apply, unapply , copy methods.

i not sure if need modify cost, if calculated based on other values make method

case class path(occupation: bitset, last: int) {   def cost: int = 42 } 

if it's not should field. want encourage use immutable structures, mean doing:

case class path(occupation: bitset, last: int, cost: int) 

adding field setter , getter in scala simple this:

class path(val occupation: bitset, val last: int) {   var cost = 0 } 

you can use this:

val path = new path(bitset(), 3) path.cost = 12 println(path.cost) 

Comments