-
创建图书信息类,包含三个属性:书名,作者,价格
-
创建6本图书对象并添加到可变 List的尾部
-
创建1本图书对象并添加到可变 List的头部
-
创建1本图书对象并添加到可变 List的第3个位置
-
根据图书名称查询是否在列表中(通过遍历列表对比名称)
-
从列表中删除第4本书
-
对于图书按价格从高到低排序。
-
遍历图书列表,并打印每本书的详细信息
-
展示全部的总的金额
import scala.collection.mutable.ListBuffer
object w45 {
// 1. 创建图书信息类
case class Book(title: String, author: String, price: Double)
def main(args: Array[String]): Unit = {
// 创建一个可变的ListBuffer来存储图书
val books = ListBuffer[Book]()
// 2. 创建6本图书对象并添加到可变List的尾部
books += Book("Scala编程", "Martin Odersky", 89.00)
books += Book("Effective Java", "Joshua Bloch", 99.00)
books += Book("深入理解Java虚拟机", "周志明", 119.00)
books += Book("Spark快速大数据分析", "Holden Karau", 79.00)
books += Book("Python数据科学手册", "Jake VanderPlas", 109.00)
books += Book("算法导论", "Thomas Cormen", 159.00)
println("添加6本书后的图书列表:")
books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
println()
// 3. 创建1本图书对象并添加到可变List的头部
val newBook = Book("编程珠玑", "Jon Bentley", 69.00)
books.prepend(newBook)
println("在头部添加《编程珠玑》后的图书列表:")
books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
println()
// 4. 创建1本图书对象并添加到可变List的第3个位置
// 注意:List索引从0开始,第3个位置就是索引2
val anotherBook = Book("设计模式", "Erich Gamma", 129.00)
if (books.length >= 2) {
books.insert(2, anotherBook)
} else {
books += anotherBook
}
println("在第3个位置添加《设计模式》后的图书列表:")
books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
println()
// 5. 根据图书名称查询是否在列表中
val searchTitle = "Scala编程"
var found = false
for (book <- books) {
if (book.title == searchTitle) {
found = true
println(s"找到图书《$searchTitle》")
}
}
if (!found) {
println(s"未找到图书《$searchTitle》")
}
println()
// 也可以使用exists方法
val exists = books.exists(_.title == searchTitle)
println(s"使用exists方法查询《$searchTitle》:$exists")
println()
// 6. 从列表中删除第4本书(索引为3)
if (books.length > 3) {
val removedBook = books.remove(3)
println(s"删除第4本书:《${removedBook.title}》")
}
println("删除第4本书后的图书列表:")
books.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
println()
// 7. 对于图书按价格从高到低排序
val sortedBooks = books.sortBy(-_.price) // 或者使用 books.sortWith(_.price > _.price)
println("按价格从高到低排序后的图书列表:")
sortedBooks.foreach(b => println(s"《${b.title}》 - ${b.author} - ¥${b.price}"))
println()
// 8. 遍历图书列表,并打印每本书的详细信息
println("当前图书列表详细信息:")
println("=" * 50)
for ((book, index) <- books.zipWithIndex) {
println(s"${index + 1}. 书名:《${book.title}》")
println(s" 作者:${book.author}")
println(s" 价格:¥${"%.2f".format(book.price)}")
println("-" * 30)
}
// 9. 展示全部的总的金额
val totalAmount = books.map(_.price).sum
println("=" * 50)
println(f"图书总金额:¥$totalAmount%.2f")
println(f"图书数量:${books.length}本")
println(f"平均价格:¥${totalAmount/books.length}%.2f")
// 另一种方式:使用foldLeft计算总金额
val totalAmount2 = books.foldLeft(0.0)((sum, book) => sum + book.price)
println(f"使用foldLeft计算的总金额:¥$totalAmount2%.2f")
}
}