-
创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
-
使用 += 操作符添加两本新的书籍到图书馆集合中。
-
根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
-
修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
-
使用 -= 操作符从图书馆集合中删除一本书。
-
遍历图书馆书籍 Map,并打印出每本书的信息。
【代码如下:】
package map
/*
*
*1. 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
*2. 使用 += 操作符添加两本新的书籍到图书馆集合中。
*3. 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
*4. 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
*5. 使用 -= 操作符从图书馆集合中删除一本书。
*6. 遍历图书馆书籍 Map,并打印出每本书的信息。
* */
import scala.collection.mutable.Map
object map03 {
def main(args: Array[String]): Unit = {
// 1. 创建可变Map:键=书籍编号(Int),值=元组(书籍名称, 作者, 库存数量)
val bookMap = Map(
1001 -> ("Java 编程思想", "Bruce Eckel", 5),
1002 -> ("Scala 实战", "Nilanjan Raychaudhuri", 3),
1003 -> ("数据结构与算法分析", "Mark Allen Weiss", 4),
1004 -> ("计算机网络", "Andrew S. Tanenbaum", 2)
)
println("=== 初始图书馆书籍信息 ===")
printBookInfo(bookMap) // 调用自定义方法打印书籍信息
// 2. 使用 += 操作符添加两本新书(键为新编号,值为新元组)
bookMap += 1005 -> ("Python 从入门到实践", "Eric Matthes", 6)
bookMap += 1006 -> ("深入理解计算机系统", "Randal E. Bryant", 3)
println("\n=== 添加两本新书后 ===")
printBookInfo(bookMap)
// 3. 根据书籍编号查询特定书籍(使用get方法,返回Option类型)
val targetBookId = 1005
val bookInfo = bookMap.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 = 1002
val newStock = 8
// 先检查书籍是否存在,存在则更新库存(元组不可变,需重新赋值整个元组)
bookMap.get(updateBookId) match {
case Some((name, author, _)) => bookMap(updateBookId) = (name, author, newStock)
case None => println(s"未找到编号 $updateBookId 的书籍,无法更新库存")
}
println(s"\n=== 将编号 $updateBookId 的书籍库存修改为 $newStock 本后 ===")
printBookInfo(bookMap)
// 5. 使用 -= 操作符根据书籍编号删除一本书
val deleteBookId = 1003
bookMap -= deleteBookId
println(s"\n=== 删除编号 $deleteBookId 的书籍后 ===")
printBookInfo(bookMap)
// 6. 遍历Map并打印每本书信息(两种常用遍历方式,选一种即可)
println("\n=== 最终遍历所有书籍信息(foreach方式) ===")
bookMap.foreach { case (bookId, (name, author, stock)) =>
println(f"编号:$bookId%4d | 书籍:$name%-18s | 作者:$author%-20s | 库存:$stock%2d 本")
}
}
// 自定义辅助方法:统一格式化打印书籍信息(避免重复代码)
def printBookInfo(bookMap: Map[Int, (String, String, Int)]): Unit = {
bookMap.foreach { case (bookId, (name, author, stock)) =>
// 格式化输出,使对齐更美观(%4d:占4位整数,%-18s:左对齐占18位字符串)
println(f"编号:$bookId%4d | 书籍:$name%-18s | 作者:$author%-20s | 库存:$stock%2d 本")
}
}
}
【运行结果:】