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 eachList
element. 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
foreach
method. Becauseforeach
takes a procedure that doesn’t return anything, and because the result offoreach
is alsoUnit
, theforeach
method 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
for
comprehension, which provides syntactically pleasing nesting ofmap
,flatMap
, andfilter
... Thefor
comprehension 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 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
随机推荐
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
- exception http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed w ...
- exception 值太大
CreateTime--2018年2月5日09:45:01 Author:Marydon 异常: Cause: java.sql.SQLException: ORA-12899: 列 " ...
- TOMCAT清理
CreateTime--2017年7月10日08:54:00Author:Marydon 如何清理TOMCAT 方式一:通过tomcat的安装目录进行清理 找到TOMCAT的根目录,如图: 实质: ...
- uva 699 The Falling Leaves(建二叉树同一时候求和)
本来看着挺难的.大概是由于我多瞟了一眼题解,瞬间认为简单多了.做题就得这样,多自己想想.如今是 多校联赛,然而我并不会做. .. .慢慢来,一直在努力. 分析: 题上说了做多不会超过80行.所以能够开 ...
- JS获取浏览器高宽度,屏幕分辨率和一些定位空隙等
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...
- 使用JDK自带的Stax操作XML
操作的books.xml <?xml version="1.0" encoding="UTF-8"?> <bookstore> < ...
- 微信小程序开发思路
小程序还没有完全开放,不能真实体验,但通过文档和开发工具,可以了解到他的开发思路 下面就介绍下小程序的开发方式,希望能帮助有兴趣的朋友对整体思路有个快速了解 整体结构 默认示例项目的目录结构 从后缀名 ...
- BIND9源码分析之acl 的实现
BIND配置中一大堆一大堆的acl,什么allow-query, allow-recursion, allow-update还有view的match-clients等等等等. acl中的主要存储的就是 ...
- PAT 1085 Perfect Sequence
PAT 1085 Perfect Sequence 题目: Given a sequence of positive integers and another positive integer p. ...