数码宝典
柔彩主题三 · 更轻盈的阅读体验

Scala函数filter使用示例:轻松筛选你需要的数据

发布时间:2025-12-11 15:41:32 阅读:2 次

在日常开发中,处理ref="/tag/426/" style="color:#C468A7;font-weight:bold;">数据集合是家常便饭。比如你有一堆用户登录记录,只想找出最近一周活跃的用户;或者从一长串商品价格里挑出低于100元的特价商品。这时候,Scalafilter 函数就派上用场了。

什么是 filter?

filter 是 Scala 集合类中的一个高阶函数,它接收一个返回布尔值的条件函数,然后遍历集合中的每个元素,只保留满足条件的那些元素,生成一个新的集合。

它的基本语法很简单:

collection.filter(condition)

基础使用:筛选偶数

假设你有一个数字列表,想从中选出所有偶数:

val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = numbers.filter(x => x % 2 == 0)
println(evenNumbers)  // 输出:List(2, 4, 6, 8, 10)

这里 x => x % 2 == 0 就是一个判断是否为偶数的条件函数。

字符串筛选:找出长度大于3的单词

再来看个更贴近实际的场景。你在做文本分析,有一组单词,只想保留长度超过3个字符的:

val words = List("cat", "dog", "bird", "fish", "a")
val longWords = words.filter(word => word.length > 3)
println(longWords)  // 输出:List(bird, fish)

对象过滤:筛选特定用户

实际项目中更多是处理对象。比如你有一个用户列表,每个用户有姓名和年龄:

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

val users = List(
  User("Alice", 25),
  User("Bob", 17),
  User("Charlie", 30),
  User("Diana", 16)
)

// 只保留成年人(假设18岁为成年)
val adults = users.filter(u => u.age >= 18)
println(adults)  // 输出:List(User(Alice,25), User(Charlie,30))

这种写法在处理 API 返回的用户数据时特别实用,比如后台需要过滤出可参与活动的用户。

结合其他函数:先映射再过滤

filter 常和其他函数组合使用。比如你想从用户列表中提取成年用户的姓名:

val adultNames = users
  .filter(_.age >= 18)
  .map(_.name)

println(adultNames)  // 输出:List(Alice, Charlie)

这种链式调用让代码既简洁又清晰,读起来就像在描述业务逻辑。

小技巧:使用占位符简化写法

如果参数只用一次,可以用下划线代替变量名:

val evenNums = numbers.filter(_ % 2 == 0)
val shortWords = words.filter(_.length < 4)

看起来更干净,适合简单判断。

在真实项目里,filter 不只是“筛选”这么简单。它帮你把杂乱的数据变整齐,让后续处理更高效。无论是前端显示调校时过滤日志,还是后端处理用户行为数据,掌握好 filter 能省不少事。