Map实训内容
-
创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
-
使用 += 操作符添加两本新的书籍到图书馆集合中。
-
根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
-
修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
-
使用 -= 操作符从图书馆集合中删除一本书。
-
遍历图书馆书籍 Map,并打印出每本书的信息。
import scala.collection.mutable
object map03 {
def main(args: Array[String]): Unit = {
// 1. 创建可变Map,键为书籍编号(String),值为元组(书名, 作者, 库存)
val library: mutable.Map[String, (String, String, Int)] = mutable.Map(
"B001" -> ("《Scala编程实战》", "马丁·奥德斯基", 15),
"B002" -> ("《深入理解Java虚拟机》", "周志明", 20),
"B003" -> ("《Python编程:从入门到实践》", "埃里克·马瑟斯", 18)
)
println("=== 初始图书馆书籍信息 ===")
printLibrary(library) // 调用遍历方法打印
// 2. 使用 += 操作符添加两本新书
library += "B004" -> ("《数据结构与算法分析》", "马克·艾伦·维斯", 12)
library += "B005" -> ("《MySQL必知必会》", "本·福达", 25)
println("\n=== 添加两本新书后 ===")
printLibrary(library)
// 3. 根据书籍编号查询(使用get方法,返回Option类型,避免空指针)
val targetBookId = "B003"
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. 修改某本书的库存数量(元组不可变,通过替换整个元组实现更新)
val updateBookId = "B002"
library.get(updateBookId) match {
case Some((name, author, oldStock)) =>
val newStock = oldStock + 5 // 假设库存增加5本
library.update(updateBookId, (name, author, newStock)) // 替换元组
println(s"\n=== 书籍编号 $updateBookId 库存更新 ===")
println(s"原库存:$oldStock → 新库存:$newStock")
case None => println(s"未找到编号为 $updateBookId 的书籍,无法更新库存")
}
// 5. 使用 -= 操作符删除一本书
val deleteBookId = "B004"
library -= deleteBookId
println(s"\n=== 删除书籍编号 $deleteBookId 后 ===")
printLibrary(library)
// 6. 遍历Map并打印所有书籍信息(复用printLibrary方法)
println("\n=== 最终图书馆所有书籍信息(遍历输出) ===")
printLibrary(library)
}
// 辅助方法:遍历并打印图书馆书籍信息
def printLibrary(library: mutable.Map[String, (String, String, Int)]): Unit = {
if (library.isEmpty) {
println("图书馆暂无书籍")
return
}
library.foreach { case (bookId, (name, author, stock)) =>
println(s"书籍编号:$bookId → 书名:$name,作者:$author,库存:$stock 本")
}
}
}
结果如下: