文档章节

Scala if Statements and for Loop

秋风醉了
 秋风醉了
发布于 2015/12/20 23:39
字数 408
阅读 73
收藏 1

Scala if Statements and for Loop


Scala if Statements

scala 中的 if 和其它编程语言中不同的一点是 if 表达式的返回值。比如下面这样,

val configFilePath = if (configFile.exists()) {
  configFile.getAbsolutePath
} else {
  configFile.createNewFile()
  configFile.getAbsolutePath
}

configFilePath: String = /Applications/IntelliJ IDEA 15.app/Contents/bin/somefile.txt


Scala for Loops

一个基本的for循环语句,

val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog")

for (bread <- dogBreeds)
  println(bread)

Generator Expressions

表达式 

bread <- dogBreeds

叫做generator expression,这样命名是因为它从一个集合里产生一个个体值。left arrow operator (<-) 是用来遍历一个集合的。比如下面这样,

for (i <- 1 to 10) println(i)

Scala for Loops:Filtering Values

在for循环中,可以过滤数据,如下,

val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog")
for (bread <- dogBreeds
     if bread.contains("Terrier")
) println(bread)

还可以使用多个过滤条件,

for (bread <- dogBreeds
     if bread.contains("Terrier")
     if !bread.startsWith("Yorkshire")
) println(bread)

这两种方式是等价的,

for (bread <- dogBreeds
     if bread.contains("Terrier") && !bread.startsWith("Yorkshire")
) println(bread)

Yielding

上面那段话的意义就是,for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。

scala> val filteredBreeds =
     |   for (breed <- dogBreeds
     |        if breed.contains("Terrier") && !breed.startsWith("Yorkshire")
     |   ) yield breed
filteredBreeds: List[String] = List(Scottish Terrier)

scala>

scala> filteredBreeds.toString()
res3: String = List(Scottish Terrier)

下面遍历Map,

scala> val map = Map("key1" -> "value1", "key2" -> "value2", "key3" -> "value3")
map: scala.collection.immutable.Map[String,String] = Map(key1 -> value1, key2 -> value2, key3 -> value3)

scala> val temp_map = for (m <- map
     |                     if m._1.equals("key1")
     | ) yield m
temp_map: scala.collection.immutable.Map[String,String] = Map(key1 -> value1)

scala> temp_map.toString()
res4: String = Map(key1 -> value1)

=============END=============

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 237
博文 578
码字总数 419908
作品 0
朝阳
程序员
Scala 的 yield 例子 (for 循环和 yield 的例子)

我看了《Programming in Scala》一书,仍然对 Scala yield 关键字的理解不甚清楚。起初我以为 Scala yield 的与 Ruby 的 yield 是一样,Ruby 中 yield 是被传入代码块的占位符。Scala 中的 ...

月下独酌100
2016/04/06
26
0
Scala 的 yield 例子 (for 循环和 yield 的例子)

我看了《Programming in Scala》一书,仍然对 Scala yield 关键字的理解不甚清楚。起初我以为 Scala yield 的与 Ruby 的 yield 是一样,Ruby 中 yield 是被传入代码块的占位符。Scala 中的 ...

Zero零_度
2016/08/16
7
0
org.apache.spark.SparkException: Task not serializable

我在实现spark从kafka里读取数据,然后入Mongodb,出现以下的问题: org.apache.spark.SparkException: Task not serializable at org.apache.spark.util.ClosureCleaner$.ensureSerializab......

龙爱李
2015/03/28
3.5K
3
Scala IDE for Eclipse 2.0 Beta4 发布

Eclipse IDE for Scala 发布了第四个 beta 版本,支持 Scala 2.9.0.Final 编译器。 这是一个小升级版本,主要改进: A crash when using an empty Java Compiler Task tag list Better compl...

红薯
2011/05/13
603
0
Using Prepared Statements

Overview of Prepared Statements Sometimes it is more convenient to use a object for sending SQL statements to the database. This special type of statement is derived from the mo......

Oscarfff
2016/06/23
17
0

没有更多内容

加载失败,请刷新页面

加载更多

elastic search+kibana 5.6.12安装指南

前提准备: 1,安装jdk, We recommend installing Java version 1.8.0_131 or later. 2, 设置文件最大打开数(使用命令ulimit -n查看) ulimit -n 65536 3, 创建用户elastic/用户组elastic gro...

PageYi
14分钟前
1
0
安装mongodb碰到error: unpacking of archive failed on file /etc/init.d/mongod;5bcec214: cpio: open如何解决

今用yum安装mongodb4.0.3发现一个错误,当用yum install 安装mongo-org 时除了mongodb-org-server 没有安装以外其他的都安装正确,重新安装mongodb-org-server 时报如下错误信息 在一篇老外 ...

chanking
16分钟前
1
0
O2OA:企业办公数字化转型的更佳选择

在全球都在积极探索由新一轮信息技术所引发的第四次工业革命时,一场激发企业内生动力的数字化运动在互联网企业和传统企业之间却呈现出两种截然不同的状态。   传统企业办公数字化不彻底仍...

超能之法师
18分钟前
1
0
基于SylixOS 对 Goahead 进行配置使用 OpenSSL

1. 编译并部署OpenSSL SylixOS支持OpenSSL,git地址为:http://git.sylixos.com/repo/openssl.git 获取OpenSSL工程源码后,导入RealEvo-IDE中编译,编译完成后生成动态库文件和openssl可执行...

Baiqq
21分钟前
1
0
nginx+tomcat均衡负载

一、安装好nginx环境,启动至少两个的tomcat服务; 此处tomcat访问地址为:http://192.168.106.128:1000/、http://192.168.106.128:1001/、http://192.168.106.128:1002/ 二、修改nginx配置文...

狼王黄师傅
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部