Search code examples
scalacase-class

Scala converting List of case class to List of another case class


case class student1(name :String, marks :Long)
 
case class student2(studentName:String, marks:Long)
 
val mylist:List[student1] = List( student1("a",100) , student1("b",200))

How can I convert mylist into List[student2] in more elegant way than this?

val res: List[student2] = mylist.map(s => student2(s.name,s.marks))

Solution

  • You could add an auxiliary constructor.

    case class student2(studentName:String, marks:Long) {
      def this(s:student1) = this(s.name, s.marks)
    }
    
    . . .
    
    val res: List[student2] = mylist.map(new student2(_))
    

    Or you could just do a pattern match, but for that you really should capitalize your class names.

    val res: List[Student2] =
      mylist.map{case Student1(n,m) => Student2(n,m)}