How do I iterate over a Scala List (or more generally, a sequence) using theforeach method or for loop?
Scala List/sequence FAQ: How do I iterate over a Scala List (or more generally, a sequence) using theforeach method or for loop?
There are a number of ways to iterate over a Scala List using theforeach method (which is available to Scala sequences like List, Array,ArrayBuffer, Vector, Seq, etc.) andfor comprehension, and I'll show a few of those approaches here.
1) Iterating lists with foreach
A common way to iterate over a Scala List is with the foreach method. Here's a quote about foreach from the book Programming in Scala:
foreach takes a procedure -- a function with a result type
Unit-- as the right operand. It simply applies the procedure to eachListelement. The result of the operation is againUnit; no list of results is assembled.
Here's a simple example showing how to use foreach to print every item in a List:
scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3) scala> x.foreach { println }
1
2
3
If you've used a programming language like Ruby, this syntax will look familiar to you.
Note that this is a relatively common way to use the
foreachmethod. Becauseforeachtakes a procedure that doesn’t return anything, and because the result offoreachis alsoUnit, theforeachmethod is typically used for its side effects -- something like this example where output is printed for a user to see.
This next example shows a way to sum all the elements in a list usingforeach:
scala> var sum = 0
sum: Int = 0 scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3) scala> x.foreach(sum += _) scala> println(sum)
6
Note that this second example is not a common or preferred way to useforeach; I’m just trying to show some different possibilities. (When I first wrote this example it wasn’t the worst thing in the world to use a var field, but with more and more developers preferrring functional programming, the use of var fields is discouraged.)
2) Scala Lists and the for comprehension
The Scala for comprehension is not specific to lists, but is an extremely powerful way to operate on a List and other sequences. Here's a simple example of how to iterate over a sequence using the for comprehension (also known as a “for loop”):
scala> val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")
names: Vector[java.lang.String] = Vector(Bob, Fred, Joe, Julia, Kim)
scala> for (name <- names) println(name)
Bob
Fred
Joe
Julia
Kim
So far, so good. Now let's add a simple if clause to the for comprehension to print only the elements we want to print:
scala> val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")
names: Vector[java.lang.String] = Vector(Bob, Fred, Joe, Julia, Kim)
scala> for (name <- names if name.startsWith("J"))
| println(name)
Joe
Julia
If you already know about the for comprehension, you know that you can add multiple if clauses, and much more functionality. I could easily write an entire tutorial on the Scala for comprehension, so to keep this tutorial short, I'll stop here for now.
Before leaving, I will add these notes however, from the book Programming in Scala:
Scala provides the
forcomprehension, which provides syntactically pleasing nesting ofmap,flatMap, andfilter... Theforcomprehension is nota looping construct, but is a syntactic construct the compiler reduces tomap,flatMap, andfilter.
3) More detailed examples
I apologize that these examples are not as detailed as I prefer. If I had more free time I’d expand on them here, but sadly I don’t have that free time right now. So I’ll just have to say, “Please see the Scala Cookbook, where I cover the for loop and foreach method in great detail”:

4) Summary: Iterating Scala lists with foreach and for
I hope this short tutorial on how to iterate over a Scala List (and other sequences) using the foreach method and for comprehension have been helpful. As you can tell from these examples, there's much more power available to you with both approaches, which is one of the great things about the Scala programming language.
How do I iterate over a Scala List (or more generally, a sequence) using theforeach method or for loop?的更多相关文章
- Beginning Scala study note(3) Object Orientation in Scala
1. The three principles of OOP are encapsulation(封装性), inheritance(继承性) and polymorphism(多态性). examp ...
- Scala access modifiers and qualifiers in detail
来自:http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/ Just like Jav ...
- Scala 具体的并行集合库【翻译】
原文地址 本文内容 并行数组(Parallel Array) 并行向量(Parallel Vector) 并行范围(Parallel Range) 并行哈希表(Parallel Hash Tables ...
- Scala并发编程react、loop代码实战具体解释
演示样例代码及凝视: //scala并发编程中的react和loop,共同特点: //通过线程存用的方式让性能有所提升. //Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的 ...
- Scala中的Implicit详解
Scala中的implicit关键字对于我们初学者像是一个谜一样的存在,一边惊讶于代码的简洁, 一边像在迷宫里打转一样地去找隐式的代码,因此我们团队结合目前的开发工作,将implicit作为一个专题进 ...
- Scala代码开发 metaTable(元表)
使用Scala语言开发时,自动生成get和set方法 不用写return进行返回, 因为它的最后一行就是返回值 先建立四个层(层层递进) domain 表结构的建立 repository(DAO) 实 ...
- [原创]Scala学习:编写Scala脚本
scala支持脚本 1)在/opt/scala-script下创建一个文件hello.scala 编辑内容如下: $ hello ,this is the first scala script 2)运 ...
- learning scala How To Create Variable Argument Function - varargs :_ *
Scala collection such as List or Sequence or even an Array to variable argument function using the s ...
- 【Scala】什么是隐式转换?它又能用来干嘛?该怎么用
文章目录 定义 隐式参数 隐式转换 隐式值:给方法提供参数 隐式视图 将Int和Double类型转换为String 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
随机推荐
- [SQL]查询某一个字段在某一段时期数据库中使用到的记录
有些时候我们常常须要哪里用到了一些表,又或者什么时候运行了某一个存储过程.整理出了在某段时期内数据库运行的sql查询.也能够查询到数据库中某些字段的存放处.非常好非常强大.希望能帮到大家~ SELEC ...
- faster rcnn测试VOC2012的问题
Traceback (most recent call last): File "./tools/test_net.py", line 90, in test_net(net, i ...
- html中title属性换行实现
本文主要讲解titile属性换行的实现方式.<title> 元素可定义文档的标题,可以应用在img.a等标签上. 1.实现方式: <!DOCTYPE html> <htm ...
- const对象默觉得文件的局部变量
const 定义的对象为一个常量不能被改动. 这个想必大家都知道. 这里仅仅是介绍const对象默觉得文件的局部变量 当一个非const变量在一个c或cpp文件里为全局时,它在整个程序 ...
- ModelAndView 配置与使用
一,ModelAndView 介绍: 1)ModelAndView 用于后台与前端页面交互: 2)可以用于重定向与转发到指定页面, 3)可以保存数据然后渲染到页面 二,使用: 1)在Controlle ...
- TouchID 指纹解锁
概述 TouchID 指纹解锁 详细 代码下载:http://www.demodashi.com/demo/10701.html 一.软硬件支持 指纹验证功能的最低硬件支持为iPhone5s, iPa ...
- js控制swf播放
<html> <head> <title>用js代码控制flash的播放</title> <meta charset="utf-8&qu ...
- 两个变量交换的四种方法(Java) 七种方法(JS)
两个变量交换的四种方法(Java) 对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...
- class threading.Thread()说明:
class threading.Thread()说明: class threading.Thread(group=None, target=None, name=None, args=(), kwar ...
- 查看python selenium 的api
DOS窗口输入: python -m pydoc -p 4567 python -m pydoc : 打开pydoc模块,pydoc是查看python文档的首选工具 -p 4567: 在4567端口启 ...