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 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
随机推荐
- tomcat启用压缩的方式
<Connector port="7070" protocol="HTTP/1.1"connectionTimeout="20000" ...
- MySQL 设置慢查询为200ms
1:查看当前版本并设置long_query_time为0.2 mysql> select version(); +------------+ | version() | +----------- ...
- expdp impdp 错误: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误(解决方案)
windows: 运行 -> regedit ->查找 键值 NLS_LANG 将字符集 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 修改为AMERICAN_AME ...
- 获取每月第一天最后一天 java
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //获取前月的第一天 Calendar cal_1=Ca ...
- maven Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4
maven Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4 CreateTime--201 ...
- Eclipse debug模式 总是进入processWorkerExit
Eclipse debug模式 总是进入processWorkerExit CreateTime--2018年3月9日15:44:59 Author:Marydon 请移步至文章:http://w ...
- TCP并发server模型(三)
本篇博客讲述的是单client单线程模型,该模型相同由主进程统一accept,仅仅是将fork改为了pthread_create. 与进程相比,线程有非常多长处(速度快,占用资源少.数据能够共享). ...
- Redis学习(6)-常用命令
List命令 value值为LinkedList类型. 使用环境: 1,做大数据集合的增删. 2,任务队列.用户任务队列 链表查看 lrange key start end:获取链表从start到en ...
- Java多线程系列目录(转)
转载方便自己学习,转自:Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html 最近,在研 ...
- GPT磁盘win7激活工具
系统重装前是Win10,再次重装没有格式化磁盘.GPT分区模式安装的Win7,传统的Win7激活工具都是基于KMS的. 今天,GPT磁盘win7激活工具针对GPTwin7de激活! 01.未激活 02 ...