Scala基础应用(7)- map/flatMap和filter
来源:互联网 发布:js单选按钮选中 编辑:程序博客网 时间:2024/05/16 07:52
Scala基础应用(7)- map/flatMap和filter
本章主要介绍集合的map, flatten, flatMap, filter zip, fold, reduce等常用方法
map
map接受一个函数作为参数, 而此函数会接受一个参数为集合中元素, 所以此函数用于对集合中每一个元素进行处理后,产出其结果的集合。
val test = List("a", "b", "c")test.map(x => x.toUpperCase)或者 test.map(_.toUpperCase)
flatten
flatten 是将嵌套集合展开一层,注意Any类型的集合是不是展开的,但集合类型是可以展开的,即使是Any类型的集合类型。
List(List(List(1,2),List(3,4)), List(5,6)).flatten 可以展开一层,元法再次调用flatten进行再次展开,因为List(5,6)在第一次flatten时,已经展开,这个List会变成含有List和常数的List[Any]类型,下面可以进行再次展开List(List(List(1,2),List(3,4)), List(List(5,6), List(7,8))).flatten.flatten // 可以展开第二层
flatMap
flatMap实际上是对集合进行map, 然后将map函数处理的结果再flatten
List(List("a", "b"), List("c", "d")).flatMap (x => x)与List(List("a", "b"), List("c", "d")).flatten 返回的结果一样只是前面一个式子中,x 参数是一个List集合List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))通过上面这个式子,也可以看出x是集合,它有map功能,同时我们也能看出map返回的也是集合,而结果是展开的,所以可以理解为flatMap在执行完函数后,执行了flatten
filter
filter通过函数参数过滤掉函数返回false的元素
List("a", "b", "c").filter(x => x == "a")
zip
zip将两个集合进行合并,最终结果为较短集合的长度
val list1 = List("a", "b", "c", "d")val list2 = List(1, 2, 3)list1.zip(list2) 或者 list2.zip(list1)的长度都是3
可用zipAll来处理长度不同的两个集合,那如何处理较短的集合的填充呢?
list1.zipAll(list2, "填充1", "填充2")如果list1较短,则用"填充1"填充,如果list2较短,则用"填充2"进行填充上例将以"填充2"填充, 因为list2较短
fold
fold将集合元素进行处理,然后产生你想要的结果类型。
样式
集合变量.fold(初始值) { (累集结果变量,元素) => 处理函数体}如:List(1,2,3,4,5).fold(0) { (sum, item) => sum + item }返回15List(1,2,3,4,5).fold("a") { (sum, item) => sum + item.toString }返回 a12345注意:如果初始值类型和元素类型一至,返回类型也是该类型,否则为Any类型
foldLeft和foldRight分别从左开始fold和从右往左开始fold
class Foo(val name: String, val age: Int, val genda: Symbol)object Foo { def apply(name: String, age: Int, genda: Symbol) = new Foo(name, age, genda)}val fooList = Foo("张三", 15, '男) :: Foo("李四", 20, '男) :: Foo("阿花", 18, '女) :: Nilval lst = fooList.foldLeft(List[String]()) { (z, f) => val title = f.genda match { case '男 => "Mr." case '女 => "Ms." } println(z) z :+ s"$title ${f.name}, ${f.age}"}注意: foldLeft和foldRight产生的结果与初始值的类型相同另外:foldLeft的简写为 /:foldRight的简写为 :\(0/:(1 to 100)) (_+_)((1 to 100) :\0) (_+_)
reduce
可以将reduce认为是fold的一种特殊情况,reduce的返回值类型必须与元素的类型相同
val list1 = List(1,2,3)list1.reduce((sum,item) => sum + item)
0 0
- Scala基础应用(7)- map/flatMap和filter
- scala基础36-List的map/flatmap/filter等操作
- Stream API:filter、map和flatMap方法
- Scala Learning(2): map, flatMap, filter与For表达式
- map,reduce,filter,flatmap
- Scala深入浅出进阶经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
- scala必知必会之列表的map,flatMap,zip和reduce
- 掌握常用的几个(如,just, map,flatMap和filter等)
- 初涉RxAndroid .map() . filter() flatMap()
- scala学习之:List的map、flatMap、foreach、filter的操作代码实战
- 第88讲:Scala中使用For表达式实现map、flatMap、filter学习笔记
- 第88讲:Scala中使用For表达式实现map、flatMap、filter
- Scala深入浅出实战经典:35,List的map、flatMap、foreach、filter操作代码实战
- scala中的函数组合器map,foreach,flatmap,flatten,filter,zip等用法
- Scala学习笔记23【List 的map、flatMap、foreach、filter操作实战】
- scala-35:List的map、flatMap、foreach、filter操作代码实战
- scala中的函数组合器map,foreach,flatmap,flatten,filter,zip等用法
- Scala常用函数式编程之map、foreach、flatten、flatmap、filter、zip、zipWithIndex
- 页面404错误
- 位运算
- swift3自定义导航条(一)
- oracle创建表空间查看表报数据库未打开
- Scala基础应用(6)- 常用对象,集合等
- Scala基础应用(7)- map/flatMap和filter
- Scala基础应用(8)- 约束
- Scala基础应用(9)- 隐式转换
- Scala基础应用(10)- 传值与传名参数
- Scala基础应用(11)- 懒加载(lazy语法糖)
- Unity3D说明文档翻译-Creating Gameplay
- swift3自定义导航条(二)颜色处理
- 《Understanding the Linux kernel》学习笔记 Chapter 7: Process Scheduling
- 《深入理解java虚拟机》----读书笔记1