美文网首页
函数式编程

函数式编程

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-11-16 09:18 被阅读0次

所谓的函数式编程指的是方法的参数列表可以接收函数对象

在编写spark、flink时,常常会用到函数式编程。下面这些操作是学习的重点。

函数名 功能
foreach 用来遍历集合的,接受一个函数对象,函数的参数为集合的元素,返回值为空
map 用来对集合进行转换的
flatMap 用来对集合进行映射扁平化操作。扁平化操作可以理解为先map,然后flatten
filter 用来过滤出指定的元素
sorted 用来对集合元素进行默认排序
sortBy 用来对集合按照指定字段排序
sortWith 用来对集合进行自定义规则排序
groupBy 用来对集合元素按照指定条件分组,返回一个映射Map[K, List[A]],K为分组字段,List为这个分组字段对应的一组数据
reduce 用来对集合元素进行聚合计算,最终得到一个聚合元素
fold 用来对集合元素进行折叠计算,最后得到一个聚合元素。与reduce的不同时他提供了一个初始元素

实例:

// foreach
val lst = (1 to 10).toList
// 简写版:lst.foreach(println)
lst.foreach((x:Int) => {println(x)})

// 如果函数参数只在函数体中出现一次,并且函数体没有涉及到复杂的使用,此时就可以使用下划线(_)的方式来优化函数定义

// map, map[返回类型](f: (A) => B)
// val lst2 = lst1.map(x => "*" * x)
val lst2 = lst1.map((x:Int) => {"*" * x})

// flatMap
val lst3 = List("PHP is Best in the world", "fuck C++")
val lst4 = lst3.flatMap(x => x.split(" "))
// 相当于 lst3.map(x => x.split(" ")).flatten

// filter
val lst5 = (1 to 10).toList
val lst6 = lst5.filter(_%2 == 0)

// sorted
val lst7 = List(3, 1, 2, 9, 7)
val lst8 = lst7.sorted
// 降序排序,reverse逆转即可
val lst9 = lst8.reverse

// sortBy
val lst10 = List("1-php", "3-python", "2-scala")
val lst11 = sortBy(x => x.split("-")(0))

// sortWith,降序排列
val lst12 = lst7.sortWith( (x1, x2) => x1>=x2)

// groupBy
val lst13 = List("Jack"->"male", "Lucy"->"female", "Mike"->"male")
val map1 = lst13.groupBy(x => x._2)  // Map("male"->List("Jack", "Mike"), "female" => List("Lucy")
// 统计每个组中元素的个数
val map2 = map1.map(x => x._1 -> x._2.size) // Map("female"->1, "male"->2)

// 聚合操作
// reduce, x表示聚合后的结果,y表示后一个元素
val lst14 = lst7.reduce((x, y) => x+y)  // 将列表的数相加
// reduceRight
val lst15 = lst7.reduceRight((x, y) => x-y)
val lst16 = lst8.reduceLeft((x,y) => x-y)

// fold, foldRight, foldLeft
val lst17 = List(1, 2, 3)
val lst18 = lst17.fold(10)((x, y) => x+y)  // 16

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:函数式编程

      本文链接:https://www.haomeiwen.com/subject/edxxtrtx.html