在 Scala 编程中,可变列表(ListBuffer)是处理动态数据集合的常用工具,结合面向对象思想,可轻松实现图书信息的增删改查、排序与统计等业务功能。本文将通过完整代码示例,拆解图书信息管理的实现逻辑。
一、数据模型定义:Book 类
首先,我们用case class定义图书的数据模型。case class是 Scala 中用于创建不可变数据对象的语法糖,自动生成构造方法、equals、hashCode等方法,非常适合描述 “图书” 这类数据载体:
scala
case class Book(name: String, author: String, price: Double)
该类包含三个属性:name(书名)、author(作者)、price(价格),清晰封装图书的核心信息。
二、初始化可变列表:ListBuffer 的使用
Scala 的默认List是不可变的,若需动态修改集合(如添加、删除元素),需使用scala.collection.mutable.ListBuffer。我们先初始化一个存储Book对象的ListBuffer:
scala
import scala.collection.mutable.ListBuffer
object BookListDemo {
def main(args: Array[String]): Unit = {
// 初始化空的图书列表
val bookList = ListBuffer[Book]()
// ...后续操作
}
}
通过ListBuffer[Book]()创建空列表,后续可通过其提供的方法操作数据。
三、图书列表的核心操作
1. 添加图书:尾部、头部与指定位置
-
尾部添加:使用
+=运算符,将图书对象追加到列表末尾。例如添加《Java 编程思想》:scala
val book0 = Book("Java编程思想", "Bruce Eckel", 108.0) bookList += book0 -
头部添加:通过
prepend方法,将图书插入列表开头。例如添加《Scala 编程》:scala
val book1 = Book("Scala编程", "Martin Odersky", 89.0) bookList.prepend(book1) -
指定位置插入:使用
insert(index, element)方法,在指定索引位置插入图书(索引从 0 开始)。例如在第 3 个位置(索引 2)插入《Python 基础教程》:scala
val book2 = Book("Python基础教程", "Magnus Lie Hetland", 79.0) bookList.insert(2, book2)
2. 查询图书:按名称判断存在性
通过exists方法结合 Lambda 表达式,可快速判断列表中是否存在指定名称的图书。exists会遍历列表,只要有一个元素满足条件即返回true:
scala
val targetBookName = "Scala编程"
val isExist = bookList.exists(_.name == targetBookName)
println(s"图书《$targetBookName》是否存在:$isExist")
3. 删除图书:按索引移除元素
使用remove(index)方法删除指定索引的图书。需注意索引不能超出列表长度,因此示例中先补充一本图书使列表长度达标,再删除第 4 本(索引 3):
scala
val book3 = Book("数据结构与算法", "严蔚敏", 59.0)
bookList += book3 // 补充后列表长度为4
bookList.remove(3) // 删除索引3的元素
4. 排序:按价格降序排列
通过sortBy方法实现排序,sortBy(-_.price)表示按price属性降序排列(若省略负号则为升序):
scala
val sortedBooks = bookList.sortBy(-_.price)
5. 遍历与打印:展示图书详情
使用foreach方法遍历排序后的列表,结合 Lambda 表达式打印每本图书的详细信息:
scala
println("\n排序后的图书列表:")
sortedBooks.foreach(book =>
println(s"书名:${book.name},作者:${book.author},价格:${book.price}元")
)
6. 统计:计算总金额
通过map提取所有图书的价格,再调用sum方法求和,得到图书总价:
scala
val totalAmount = sortedBooks.map(_.price).sum
println(s"\n图书总金额:$totalAmount 元")
四、完整代码与执行效果
将上述逻辑整合,完整代码可实现从图书添加到统计的全流程。执行后会输出:
plaintext
图书《Scala编程》是否存在:true
排序后的图书列表:
书名:Java编程思想,作者:Bruce Eckel,价格:108.0元
书名:Scala编程,作者:Martin Odersky,价格:89.0元
书名:Python基础教程,作者:Magnus Lie Hetland,价格:79.0元
图书总金额:276.0 元
五、核心知识点总结
case class:简化数据模型定义,自动生成常用方法;ListBuffer:提供可变列表操作,支持增删改查;- 函数式操作:
exists、sortBy、foreach、map等方法体现 Scala 函数式编程特性,简化集合处理; - 业务逻辑整合:通过面向对象与集合操作结合,快速实现实际业务需求。