scala中的case class

6 阅读3分钟

一.case class的定义

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

二.case class的特点

(1)不可变性:case class 创建的对象是不可变的,一旦创建,其属性值不能被修改 (2)实例化可以省略new:普通的class 在实例化时,必须要写new的。 (3)自动重写方法: toString, equals, hashCode, copy。

三.自动生成方法

1.to String方法:当我们定义一个 case class 时,Scala 会自动生成toString方法,它会返回一个包含类名和参数值的字符串表示。 2.quals 和 hashCode 方法 3.copy方法

四. case class 与普通class的区别

case class 与普通class的差异,它有三点不同

  1. 在默认时,属性是 public 的
  2. 赋值修改时,可能需要 new
  3. 自己自动添加相关的 equals, toString 等方法
  • 特别指出如果主构造函数
package caseclass


object classdemo01 {
  // case class 与普通class的差异,它有三点不同
  // 1. 在默认时,属性是 public 的
  // 2. 赋值修改时,可能需要 new
  // 3. 自己自动添加相关的 equals, toString 等方法
  // * 特别指出如果主构造函数

  case class Stu(name: String, age: Int)

  def main(args: Array[String]): Unit = {
    val stu1 = Stu("小花", 18)
    // 2. 赋值修改时,可能需要 new
    // stu1.name = "xx"
    val stu2 = Stu("小花", 18)
    println(stu1)
    println(stu1 == stu2)
    val set1 = Set(stu1, stu2)
    println(set1)
  }
}

五.题目

步骤任务: 1. 使用case class创建图书信息类Book:包含四个属性:ID,书名,作者,价格。

2. 创建一个名为bookList的可变List,它只能用来保存Book的实例。

3. 初始化三本不同的书(注意id不同就是不同的书),加入到bookList中。

4. 添加一本已经存在的书。提示图书已存在。

5. 添加一本新书,提示图书添加成功。

6. 根据图书名称查询是否在列表中(通过遍历列表对比名称)

7. 删除指定书名的书

8. 删除指定ID的书

9. 对于图书按价格从高到低排序。

10. 遍历图书列表,并打印每本书的详细信息

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
    }
  }
}