scala中caseclass的定义与应用

20 阅读2分钟

一:case class的定义

case class 是 Scala 中一种特殊的类,它用于创建不可变的数据容器。

语法如下:

case class ClassName(parameter1: Type1, parameter2: Type2,...)

例如,我们要创建一个学生的case class:

case class Student(name: String, age: Int, grade: String)

二:case class的特点

(1)不可变性

case class 创建的对象是不可变的,一旦创建,其属性值不能被修改。

val student = Student("Alice", 18, "Grade 12")

// 以下代码会报错,因为 case class 的属性是不可变的

// student.age = 19

(1)实例化可以省略new

普通的class 在实例化时,必须要写new的。

(2)自动重写方法: toString, equals, hashCode, copy。

package caseclass

//case class
//与普通类有三点不同
//1:创建对象时可以省略new
//2:默认情况下,属性都是只读的,不可更改的
//3:自己自动添加相关的equals,toString方法
object class01 {
  case class Stu(var name:String, var age:Int)

  def main(args: Array[String]): Unit = {
    val st1 =  Stu("沈冲", 19)
    val st2 =  Stu("沈冲", 19)
    println(st1)
    println(st1 == st2 )
    val sb = Set(st1 ,st2)
    println(sb)
  }

}

image.png

package caseclass

import scala.collection.mutable.ListBuffer

object classClass03 {

  // 1
  case class Book(id:String, bookName:String, author:String, price:Double)

  def main(args: Array[String]): Unit = {

    val book1 = Book("001", "高效能人士的七个习惯", "韦伯", 50)
    val book2 = Book("002", "沉思录", "皇帝", 20)
    val book3 = Book("003", "自控力", "xx", 3)
    // 2, 3
    val bookList = scala.collection.mutable.ListBuffer(book1, book2, book3)

    val book4 = Book("004", "高效能人士的七个习惯", "韦伯", 10)
    // 4,5
    if(addNewBook(bookList, book4)){
      println("添加成功")
    } else {
      println("图书已经存在,添加失败")
    }

    // 6
    val bookName = "沉思录"
    if(queryBook(bookList, bookName)){
      println(s"<<${bookName}>> 存在!")
    } else {
      println(s"<<${bookName}>> 不存在!")
    }

    // 7,8
    delBook(bookList,bookName)

    // 9
    val orderBookList = bookList.sortBy(_.price).reverse

    // 10
    orderBookList.foreach(ele => {
      println(s"书名:《${ele.bookName}》")
      println(s"作者: ${ele.author}")
      println(s"价格: ${ele.price}")
      println()
    })
  }

  def delBook(bookList: ListBuffer[Book], bookName: String):Boolean = {
    // 检查图书是否存在
    val result = bookList.find(_.bookName == bookName)
    if(result.isDefined){
      bookList -= result.get
      true
    } else {
      false
    }
  }

  def queryBook(bookList: ListBuffer[Book], bookName: String):Boolean = {
    bookList.exists(_.bookName == bookName)
  }

  def addNewBook(bookList: ListBuffer[Book], book: Book):Boolean = {
    // 检查书是否存在
    if(bookList.exists(_.id==book.id)){
      false
    } else {
      bookList += book
      true
    }
  }
}