Scala函数filter使用示例

filter函数的基本用法

Scala中,filter是一个常用的操作集合的方法,它会根据给定的条件筛选出符合条件的元素。比如你有一组学生的成绩,想找出及格的分数,就可以用filter来完成。

假设我们有一个整数列表,表示一些考试成绩:

val scores = List(55, 78, 42, 90, 67, 38)

我们只需要保留大于等于60分的成绩,可以这样写:

val passingScores = scores.filter(score => score >= 60)
println(passingScores) // 输出:List(78, 90, 67)

这里的score => score >= 60是一个匿名函数,表示“每一个元素是否大于等于60”。

简化写法:使用下划线

如果觉得写参数名太啰嗦,Scala允许用下划线简写。上面的例子也可以写成:

val passingScores = scores.filter(_ >= 60)

这种写法更简洁,特别适合简单的判断逻辑。

结合字符串集合使用

除了数字,filter也能处理字符串。比如你有一份购物清单,想找出所有以“苹”开头的物品:

val items = List("苹果", "香蕉", "苹果派", "橙子", "葡萄")
val appleItems = items.filter(_.startsWith("苹"))
println(appleItems) // 输出:List(苹果, 苹果派)

这里用到了字符串的startsWith方法,配合filter就能轻松筛选。

处理对象集合

实际开发中,我们经常操作的是对象。比如定义一个学生类:

case class Student(name: String, age: Int)

创建几个学生实例:

val students = List(
Student("小明", 18),
Student("小红", 16),
Student("小强", 19)
)

现在要找出年龄大于17岁的学生:

val adults = students.filter(_.age > 17)
println(adults) // 输出:List(Student(小明,18), Student(小强,19))

通过字段访问和条件判断,filter能灵活应对复杂数据结构。

链式调用组合操作

Scala支持多个集合操作连着写。比如先筛选再取前几项:

val youngNames = students
.filter(_.age < 18)
.map(_.name)
println(youngNames) // 输出:List(小红)

这段代码先找出未成年人,再提取他们的名字,整个过程清晰流畅。