scala中的case class

22 阅读2分钟

(一)case class的定义

object caseClass01 {
  //set是可以去重的
  //创建一些对象,把他们装入set,看看能否去重!

  class Stu(var name:String,var age:Int) {
    override def equals(obj:Any): Boolean = {
      val other = obj.asInstanceOf[Stu]
      other.age == age && other.name == name
    }

     override  def toString:String = s"Stu(${name},${age})"
  }

  def main(args:Array[String]): Unit = {
    val stu1 = new Stu("小花",18)
    val stu2 = new Stu("小花",18)

    println(stu1)

    println(stu1 == stu2)

    val set1 = Set(stu1,stu2)
    println(set1)
  }
}
object caseClass02 {
 /*
 * case class
 * 样例类,相比与普通的类,它有三点不同
 *  1.在创建对象时,可以省略new
 *  2.默认情况下,属性都是只读的
  */

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

  def main(args:Array[String]): Unit ={
    val stu1 = Stu("小花",18)
//    2默认情况下,属性都是只读的
//    stu1.age = 19
//    stu1.name = "xxx"
    val stu2 = Stu("小花",18)

    println(stu1)
    println(stu1 == stu2)

    val set1 = Set(stu1,stu2)
    println(set1)
  }
}

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

区别1: 更加轻量级,特别适合来用定义数据

区别2: 内置很多方法。

步骤任务:

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

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

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

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

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

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

7. 删除指定书名的书

8. 删除指定ID的书

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

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

import scala.collection.mutable.ListBuffer

object caseClass03 {

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