使用scala编程,完成如下功能。
- 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
- 使用 += 操作符添加两本新的书籍到图书馆集合中。
- 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
- 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
- 使用 -= 操作符从图书馆集合中删除一本书。
- 遍历图书馆书籍 Map,并打印出每本书的信息。
代码:
package map
import scala.collection.mutable.Map // 导入可变Map
object test {
def main(args: Array[String]): Unit = {
// 1. 创建可变Map并初始化书籍信息(键:书籍编号,值:(书名, 作者, 库存数量))
val library: Map[String, (String, String, Int)] = Map(
"B001" -> ("《 Scala编程实战 》", "Martin Odersky", 15),
"B002" -> ("《 深入理解Java虚拟机 》", "周志明", 20),
"B003" -> ("《 算法图解 》", "Aditya Bhargava", 12)
)
println("=== 初始化后的图书馆书籍 ===")
printLibrary(library) // 调用自定义打印方法
// 2. 使用 += 操作符添加两本新书
library += "B004" -> ("《 数据结构与算法分析 》", "Mark Allen Weiss", 8)
library += "B005" -> ("《 设计模式:可复用面向对象软件的基础 》", "Erich Gamma", 10)
println("\n=== 添加两本新书后 ===")
printLibrary(library)
// 3. 根据书籍编号查询(使用get方法,返回Option类型,避免空指针)
val targetBookId = "B002"
val bookInfo = library.get(targetBookId)
println(s"\n=== 查询书籍编号 $targetBookId 的结果 ===")
bookInfo match {
case Some((name, author, stock)) =>
println(s"找到书籍:书名:$name,作者:$author,库存:$stock")
case None => println(s"未找到编号为 $targetBookId 的书籍")
}
// 4. 修改某本书的库存数量(可变Map特性:通过键获取元组后重新赋值)
val updateBookId = "B001"
library.get(updateBookId) match {
case Some((name, author, oldStock)) =>
val newStock = oldStock + 5 // 库存增加5本
library(updateBookId) = (name, author, newStock) // 重新赋值修改库存
println(s"\n=== 修改书籍编号 $updateBookId 的库存 ===")
println(s"原库存:$oldStock → 新库存:$newStock")
case None => println(s"未找到编号为 $updateBookId 的书籍,无法修改库存")
}
// 5. 使用 -= 操作符删除一本书
val deleteBookId = "B003"
library -= deleteBookId
println(s"\n=== 删除书籍编号 $deleteBookId 后 ===")
printLibrary(library)
// 6. 遍历Map并打印所有书籍信息(两种遍历方式可选)
println("\n=== 最终图书馆所有书籍信息(遍历方式1) ===")
for ((bookId, (name, author, stock)) <- library) {
println(f"书籍编号:$bookId,书名:$name,作者:$author,库存:$stock 本")
}
println("\n=== 最终图书馆所有书籍信息(遍历方式2) ===")
library.foreach { case (bookId, (name, author, stock)) =>
println(f"书籍编号:$bookId,书名:$name,作者:$author,库存:$stock 本")
}
}
// 辅助方法:打印图书馆书籍信息
def printLibrary(library: Map[String, (String, String, Int)]): Unit = {
if (library.isEmpty) {
println("图书馆暂无书籍")
} else {
library.foreach { case (id, (name, author, stock)) =>
println(f"编号:$id → 书名:$name,作者:$author,库存:$stock")
}
}
}
}
结果: