第85讲:Scala中For表达式的强大表现力实战
今天来学一下scala中的For表达式的用法。
package scala.learn
case class Persons(name:String,isMale:Boolean,children:Persons*)
object Test_85 {
def main(args:Array[String]){
val lauren = Persons("Lauren",false)
val rocky = Persons("Rocky",true)
val vivian = Persons("Vivian",false,lauren,rocky)
val persons = List(lauren,rocky,vivian)
val result = persons.filter { person => !person.isMale }.flatMap { person => (person.children.map { child => (person.name,child.name) } ) }
println(result)
val forResult = for(person<-persons;if !person.isMale;child <- person.children) yield(person.name,child.name)
println(result)
}
}
我们可以看到,我们第一种方法用的是高阶函数进行数据的筛选,首先通过filter选出Famale的人,然后通过flatMap,对persons中的每一个元素进行逐一的运算:将输入person选出他们的children,然后将children再次进行map运算,得到person的name和该person的children的name组成的列表。
而同样的功能,我们可以通过for循环,很简单的表达出来。
首先,person遍历persons,然后,通过if控制语句,挑选出Famale,然后,child再遍历挑选出来的person的children。最后经过yield,组成结果列表。
其实,通过源码,我们可以看到,for循环最终也是通过map计算和flatMap计算组合而成的。
分享下更多的scala资源吧:
百度云盘:http://pan.baidu.com/s/1gd7133t
微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416
360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)
信息来源于 DT大数据梦工厂微信公众账号:DT_Spark
关注微信账号,获取更多关于scala学习内容
第85讲:Scala中For表达式的强大表现力实战的更多相关文章
- scala中的表达式
scala中的表达式是有值的, 所以可以把表达式当做参数来传递, 那么接受表达式的形参定义一般是: block: =>Unit , 没有形参,返回类型Unit spark中的这个代码很经典, ...
- 第86讲:Scala中For表达式的生成器、定义和过滤器
今天我们来看一下For表达式中的生成器,定义和过滤等内容. 让我们来看下代码 def main(args:Array[String]){ val lauren = Persons(" ...
- Akka系列(五):Java和Scala中的Future
前言....... 随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue ...
- Programming In Scala笔记-第七章、Scala中的控制结构
所谓的内建控制结构是指编程语言中可以使用的一些代码控制语法,如Scala中的if, while, for, try, match, 以及函数调用等.需要注意的是,Scala几乎所有的内建控制结构都会返 ...
- 第87讲:scala中使用For表达式做查询
今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...
- Scala 深入浅出实战经典 第55讲:Scala中Infix Type实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala中的函数表达式
最近看Spark的东西,由于之前没有接触过lambda函数表达式,所以搜了点资料,特地纪录在此 Scala中的Lambda表达式 在函数式编程中,函数是基本的构造块.Scala融合了java中的面向对 ...
- Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第57讲:Scala中Dependency Injection实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- ofo退押金脚本
同事钉钉给的 因为押金一直没退,电话很难打进去,咨询客服排队要等好久,一直几千位. 长时间挂机就自动退出客服了,所以自动写了一个脚本,目前已经成功退押金了.所以共享出来 1.关注ofo小黄车订阅号,注 ...
- Android开发之自定义的ProgressDialog
package com.example.dialog; import android.app.ProgressDialog; import android.content.Context; /** * ...
- De novo RNA-Seq Assembly Using De Bruijn Graphs
De novo RNA-Seq Assembly Using De Bruijn Graphs 2017-06-12 09:42:47 59 0 0 在说基因组的拼接之前,可 ...
- 让delphi像C语言一样灵活
lazarus是免费的delphi 拥有和c语言一样的灵活性,见代码: procedure TForm1.FormCreate(Sender: TObject);var p:PIntegerArray ...
- SevenZipShaper压缩类
//7z下载或者自己去找个地址 nurget,github之类的 链接:https://pan.baidu.com/s/1__dPu7X5b8Xr_ej9ya7Kdg 密码:q8nwusing Sev ...
- js 异步加载和同步加载
异步加载 异步加载也叫非阻塞模式加载,浏览器在下载js的同时,同时还会执行后续的页面处理.在script标签内,用js创建一个script元素并插入到document中,这种就是异步加载js文件了: ...
- 通过flask中的Response返回json数据
使用flask的过程中,发现有时需要生成一个Response并返回.网上查了查,看了看源码,找到了两种办法: from flask import Response, json Response(jso ...
- [ASP.NET]使用Oracle.ManagedDataAccess的OracleParameter参数化和OracleDataAdapter模糊查询
今天写个查询员工的信息的demo遇到了2个问题 问题1.使用Oracle.ManagedDataAccess的OracleParameter参数化 OracleParameter 的使用(参数名要以: ...
- HDU3695(AC自动机模板题)
题意:给你n个字符串,再给你一个大的字符串A,问你着n个字符串在正的A和反的A里出现多少个? 其实就是AC自动机模板题啊( ╯□╰ ) 正着query一次再反着query一次就好了 /* gyt Li ...
- kbmmw 5.01 发布
Important notes (changes that may break existing code) ============================================= ...