1、map

在列表中的每个元素上计算一个函数,并且返回一个包含相同数目元素的列表。

scala> numbers.map(_ * 2)
res3: Array[Int] = Array(2, 4, 6, 8)

2、foreach

和map一样对序列中的每个元素操作,不同的是无返回值

scala> numbers.foreach(println(_))
1
2
3
4

3、filter

移除任何使得传入的函数返回false的元素。返回Boolean类型的函数一般都称为断言函数。

scala> numbers.filter(_ % 2 == 0)
res5: Array[Int] = Array(2, 4)

4、zip

把两个列表的元素合成一个由元素对组成的列表里。

scala> Array(1, 2, 3).zip(Array("one", "two", "three"))
res6: Array[(Int, java.lang.String)] = Array((1,one), (2,two), (3,three))

5、partition

根据断言函数的返回值对列表进行拆分。

scala> val numbers = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
numbers: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> numbers.partition(_ % 2 == 0)
res7: (Array[Int], Array[Int]) = (Array(2, 4, 6, 8, 10),Array(1, 3, 5, 7, 9))

6、find

返回集合里第一个匹配断言函数的元素

scala> numbers.find(_ > 5)
res8: Option[Int] = Some(6)

7、drop&dropWhile

drop丢弃前i个元素

scala> numbers.drop(3)
res9: Array[Int] = Array(4, 5, 6, 7, 8, 9, 10)

dropWhile移除前几个匹配断言函数的元素

scala> numbers.dropWhile(_ % 2 != 0)
res11: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10)

8、foldLeft

scala> numbers.foldLeft(0)((a, b) => a + b)
res12: Int = 55

0是起始值

scala> numbers.foldLeft(0){(a, b) => println("a: " + a + " b: " + b); a + b}
a: 0 b: 1
a: 1 b: 2
a: 3 b: 3
a: 6 b: 4
a: 10 b: 5
a: 15 b: 6
a: 21 b: 7
a: 28 b: 8
a: 36 b: 9
a: 45 b: 10
res16: Int = 55

9、foldRight

迭代方向与前者相反

10、flatten

flatten可以把嵌套的结构展开

scala> Array(Array(1, 2), Array(3, 4))
res17: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> Array(Array(1, 2), Array(3, 4)).flatten
res18: Array[Int] = Array(1, 2, 3, 4)

11、flatMap

它结合了map和flatten的功能。flatMap接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。

scala> val test = Array(Array(1, 2), Array(3, 4))
test: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> test.flatMap(x => x.map(_ * 2))

res20: Array[Int] = Array(2, 4, 6, 8)

scala函数组合器的更多相关文章

  1. scala进阶笔记:函数组合器(combinator)

    collection基础参见之前的博文scala快速学习(二). 本文主要是组合器(combinator),因为在实际中发现很有用.主要参考:http://www.importnew.com/3673 ...

  2. Java函数接口实现函数组合及装饰器模式

    摘要: 通过求解 (sinx)^2 + (cosx)^2 = 1 的若干写法,逐步展示了如何从过程式的写法转变到函数式的写法,并说明了编写"[接受函数参数]并返回[能够接受函数参数的函数]的 ...

  3. Scala学习(四)——模式匹配与函数组合

    函数组合 让我们创建两个函数: def f(s: String) = "f(" + s + ")" def g(s: String) = "g(&qu ...

  4. Scalaz(14)- Monad:函数组合-Kleisli to Reader

    Monad Reader就是一种函数的组合.在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative.我们可以用Monadic方法进行函数组合: i ...

  5. 泛函编程(4)-深入Scala函数类

    既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...

  6. python二 总结--函数-- 装饰器

    装饰器是什么? 有什么用? 为什么要用? 真的有用吗? 1.装饰器: 装饰器: 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能. 原则:1.不能修改被装饰的函数的源代码          ...

  7. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  8. 【译】通过 Rust 学习解析器组合器 — Part 1

    原文地址:Learning Parser Combinators With Rust 原文作者:Bodil 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gol ...

  9. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

随机推荐

  1. poj 1273 (nyoj 323) Drainage Ditches : 最大流

    点击打开链接 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 49648   Accepte ...

  2. iOS 模态视图

    模态视图不是专门的某个类,而是通过视图控制器的presentViewController方法弹出的视图,我们称为模态视图. 模态视图出现的场景一般是临时弹出的窗口,譬如:登录窗口: 模态视图弹出时通过 ...

  3. ubuntu实用技巧

    添加alias ~/.bash_alias文件: alias go="python /Users/xhat/Downloads/goagent/local/proxy.py" ~/ ...

  4. (整理)C#实现UDP广播

    (一) IP地址解析 IP地址的类型:XXX.XXX.XXX.XXXA类: 1.0.0.1--126.255.255.254 最高位是0: 1个字节的网络地址和3个地址的主机地址 测试地址:127.X ...

  5. 【翻译】什么是 eCPM & RPM 与其计算公式

    [原文链接] What is eCPM & RPM. How to Calculate eCPM & RPM using Formula eCPM代表着每千次网页爆光转换率(或者是每千 ...

  6. 常见行为:仿真&重力&碰撞&捕捉

    一.UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象,重力.弹性碰撞等,游戏开发中很常见,例如愤怒的小鸟. 二.UI ...

  7. iis 站点部署后 Microsof .Net Framework异常

    最近在部署站点到 iis 中时,遇到 iis 崩溃的问题,一打开部署好 的站点后,就出现 Microsoft .Net Framework 异常的消息提示,具体的 异常情况如下: 于是在网上查找了很多 ...

  8. c#中如何得到百分比数值

    //此方法得到的百分比后小数太多,不行double percent=Convert.ToDouble(2)/Convert.ToDouble(34);string result=(percent*10 ...

  9. UTC格式转换 & 十六进制换算为十进制

    UTC格式转换成北京时间格式: /// <summary> /// UTC格式与datatime的转换 /// </summary> /// <param name=&q ...

  10. call函数心得

    今天深深受项目组一老大哥深深的鄙视了一把,在用call的时候,因不理解导致函数之间无法正常调用 function A(){ B.call(XXX,a,b,c); }; function B(a,b,c ...