scala中的case class

7 阅读3分钟

(一)case class的定义

object caseclass01 {
  case class Student(var id:String, var name:String) {
//    override def equals(obj: Any): Boolean = {
//      val other = obj.asInstanceOf[Student]
//      other.id == id && other.name == name
//    }
//
//    override def toString: String = {
//      s"Student(${id},${name})"
 //   }
  }

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

    val stu1 = new Student("1","小花")
    val stu2 = new Student("1","小花")
    println(stu1)

    println(stu1 == stu2)

    val set1 = Set(stu1,stu2)

    println(set1)
  }
}

(二)case class的特点

(1)不可变性

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

(2)实例化可以省略new

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

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

(三)case class 与普通class的区别

/**
 *
 * case class(样例类)    v.s.   class(类)
 *   1.case class 可以在定义对象时,省略new
 *   2.case class 的属性在默认情况下是只读的。如果希望可以修改,那需要主动使用var。
 *   3.case class 会自动重写 equals,toString ......
 *
 *   当我们只需要使用类来表示数据的时候,就可以选择使用case class, 它更加简单!
 */
object caseclass02 {
  case class Student1(var id:String, var name:String) {
  }
    class Student2(var id:String,var name:String){
  }

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

    val stu1 = new Student2("1","小花")
    val stu2 = new Student2("1","小花")
    println(stu1 == stu2)

    println(stu1)
    println(Student1("1","小花"))

  }
}

(四)、实训内容

步骤任务:

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

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

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

4. 添加一本已经存在的书。此时应该去修改bookList中对应书目的数量,而不是去添加一条新数据。

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

6. 删除指定书名的书

7. 删除指定ID的书

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

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

10. 计算全部总的金额

/**
 * 步骤任务:
 * 1.使用case class创建图书信息类Book:包含四个属性:ID,书名,作者,价格,数量。
 * 2.创建一个名为bookList的可变List,它只能用来保存Book的实例。
 * 3.初始化三本不同的书(注意id不同就是不同的书),加入到bookList中。
 * 4.添加一本已经存在的书。此时应该去修改bookList中对应书目的数量,而不是去添加一条新数据。
 * 5.根据图书名称查询是否在列表中(通过遍历列表对比名称)
 * 6.删除指定书名的书
 * 7.删除指定ID的书
 * 8.对于图书按价格从高到低排序。
 * 9.遍历图书列表,并打印每本书的详细信息
 * 10.计算全部总的金额
 */

object caseclass03 {
  //1
  case class Book(id: String, name: String, author: String, price: Double, amount: Int) {
  }

  def main(args: Array[String]): Unit = {
    //2
    val book1 = Book("1", "重生之将门毒后", "千山茶客", 44.5, 10)
    val book2 = Book("2", "枭起青壤", "尾鱼", 50, 9)
    val book3 = Book("3", "灯花笑", "千山茶客", 40, 7)
    //3
    val bookList = scala.collection.mutable.ListBuffer(book1, book2, book3)
    //7
    val id = "1"
    val rst = bookList.find(book => book.id == id)
    if (rst.isDefined) {
      bookList -= rst.get
      println(s"删除成功")
    }
    //8
    val sortList = bookList.sortWith((a, b) => a.price > b.price)
    //9
    bookList.foreach(ele => {
      println(s"${ele.id} ${ele.name} ${ele.author} ${ele.price} ${ele.amount}")
    })

    //10
    var total: Double = 0;
    bookList.foreach(ele => {
      total += ele.price * ele.amount
    })
    println(s"总价为:$total")
  }
}