Scala中case class的实训练习

34 阅读2分钟

实训内容

步骤任务:

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

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

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

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

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

6. 删除指定书名的书

7. 删除指定ID的书

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

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

10. 展示全部的总的金额

运行代码


package caseclass

import scala.collection.mutable.ListBuffer

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

  def main(args: Array[String]): Unit = {
    // 2
    val BookList: ListBuffer[Book] = ListBuffer()

    //3
    val book1 = Book(1, "米小圈", "佚名", 20.2, 1)
    val book2 = Book(2, "怎样变成有钱人", "梦语", 100, 1)
    val book3 = Book(3, "欢欢喜喜", "梦语", 50, 1)
    BookList += book1
    BookList += book2
    BookList += book3

    // 4
    // val book4 = Book(3, "嘻嘻哈哈", "梦语", 50, 10)
    val book4 = Book(4, "嘻嘻哈哈", "梦语", 50, 10)
    val rst4 = BookList.find(ele=>ele.id == book4.id)
    if(rst4.isDefined){ // 修改数量
      rst4.get.amount = rst4.get.amount + book4.amount
    } else {
      BookList += book4
    }

    // 5 查询是否存在
    var bookname = "霸道总裁爱上我"
    val rst0 = BookList.find(ele =>ele.name == bookname)
    if(rst0.isDefined){
      println(s"${bookname} 存在")
    } else {
      println(s"${bookname} 不存在")
    }
    // 6 删除指定名称的书
    var bookName = "xix"
    val rst1 = BookList.find(ele=>ele.name==bookName)
    if(rst1.isDefined){
      BookList -= rst1.get
      println(s"删除${bookName}的书成功")
    } else {
      println(s"没有找到名称: ${bookName}的书")
    }

    // 7 删除指定ID的书
    val id = 1
    val rst2 = BookList.find(ele=>ele.id==id)
    if(rst2.isDefined){
      BookList -= rst2.get
      println(s"删除ID${id}的书成功")
    } else {
      println(s"没有找到ID${id}的书")
    }

    // 8 对图书按价格从高到低排序
    val newList = BookList.sortWith((a, b) => {
      a.price > b.price
    })

    // 9 遍历图书列表,并打印每本书的详细信息
    newList.foreach(ele => {
      println(s"${ele.id} ${ele.name} ${ele.price} ${ele.amount}本")
    })

    // 10 展示全部的总金额
    var totalPrice = 0.0
    newList.foreach(ele => {
      totalPrice += ele.price * ele.amount
    })
    println(s"总价格: ${totalPrice}")
  }
}

运行结果

image.png