(一)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")
}
}