遍历 foreach
之前,学习过了使用for表达式来遍历集合。我们接下来将学习scala的函数式编程,使用foreach方法来进行遍历、迭代。它可以让代码更加简洁。
用途:
foreach 会帮我们对集合中的每一个元素取出来进行处理, 处理的逻辑由我们自行定义
集合中的元素,都会传入给你提供的函数去计算
方法签名
foreach(f: (A) ⇒ Unit): Unit
f 表明一个函数, A表明传入的参数 =>表明函数返回值是Unit, foreach 整体返回值Unit
说明
foreach | API | 说明 |
---|---|---|
参数 | f: (A) ⇒ Unit | 接收一个函数对象<br />函数的输入参数为集合的元素,返回值为空 |
返回值 | Unit | 空 |
foreach执行过程
我们传入foreach的是一个函数, 那么怎么工作的呢?
foreach 帮我们把集合中的每一个元素取出来, 然后传给函数, 然函数进行操作
如下图
示例
有一个列表,包含以下元素1,2,3,4,请使用foreach方法遍历打印每个元素
参考代码
代码语言:javascript复制// 定义一个列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
// 迭代打印
scala> a.foreach((x:Int)=>println(x))
使用类型推断简化函数定义
上述案例函数定义有点啰嗦,我们有更简洁的写法。因为使用foreach去迭代列表,而列表中的每个元素类型是确定的
- scala可以自动来推断出来集合中每个元素参数的类型
- 创建函数时,可以省略其参数列表的类型
示例
有一个列表,包含以下元素1,2,3,4,请使用foreach方法遍历打印每个元素
使用类型推断简化函数定义
参考代码
代码语言:javascript复制scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
// 省略参数类型
scala> a.foreach(x=>println(x))
使用下划线来简化函数定义
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义
我们来强调一下要求:
参数只在函数体(注意是函数体, 不包含参数定义那里)里出现一次
对这个参数没有复杂的调用, 如(if for 等循环 或迭代等嵌套, 或者在println语句中等(通俗来说就是被括号包起来了))
示例
有一个列表,包含以下元素1,2,3,4,请使用foreach方法遍历打印每个元素
使用下划线简化函数定义
参考代码
代码语言:javascript复制scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
a.foreach(println(_))
- 如果方法参数是函数,如果出现了下划线,scala编译器会自动将代码封装到一个函数中
- 参数列表也是由scala编译器自动处理
https://www.baeldung.com/scala/underscore