基于Java学习scala

  • 高阶函数练习案例
    • 1、定义一个高阶函数,按照指定的规则对集合里面的每个元素进行操作
    • 2、定义一个高阶函数,按照指定的规则对集合中的所有元素进行聚合
    • 3、定义一个高阶函数,按照指定的规则获取指定元素
    • 4、定义一个高阶函数,按照指定的规则对数据进行分组
    • 5、定义一个高阶函数,按照指定的规则对数据进行过滤,保留符合要求的数据

高阶函数练习案例

1、定义一个高阶函数,按照指定的规则对集合里面的每个元素进行操作

 //比如: 对集合中每个元素进行操作,得到集合每个元素的长度def main(args: Array[String]): Unit = {val arr = Array[String]("java", "python", "scala", "idea")println(map(arr, _.length).toBuffer)}def map(arr: Array[String], operator: String => Int) = {for (item <- arr) yield {operator(item)}}

2、定义一个高阶函数,按照指定的规则对集合中的所有元素进行聚合

 //比如:求得集合中的所有元素的和def main(args: Array[String]): Unit = {val arr = Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10)println(reduce(arr, _ + _))println(reduce(arr, _ * _))}def reduce(arr: Array[Int], func: (Int, Int) => Int) = {var tmp = arr(0)for (i <- 1 until arr.length) {tmp = func(tmp, arr(i))}tmp}

3、定义一个高阶函数,按照指定的规则获取指定元素

 //比如,获取年龄最大的def main(args: Array[String]): Unit = {val arr = Array("zhangsan 20 3000", "fang 28 20000", "yire 15 90000")println(sortBy(arr, _.split(" ")(1).toInt))println(sortBy(arr, _.split(" ")(2).toInt))}def sortBy(arr: Array[String], func: (String) => Int) = {var tmp = func(arr(0))var result = arr(0)for (i <- 1 until arr.length) {val arrRes = func(arr(i))if (arrRes > tmp) {tmp = arrResresult = arr(i)}}result}

4、定义一个高阶函数,按照指定的规则对数据进行分组

//比如,按照性别分组def main(args: Array[String]): Unit = {val arr = Array[String]("zhangsan 男 深圳", "lisi 女 深圳", "王五 男 北京")println(sortBy1(arr, _.split(" ")(1)))println(sortBy1(arr, _.split(" ")(2)))println(sortBy2(arr, _.split(" ")(1)))println(sortBy2(arr, _.split(" ")(2)))}//java的类来实现def sortBy1(arr: Array[String], func: String => String) ={val result = new util.HashMap[String, util.ArrayList[String]]for (elem <- arr) {val key = func(elem)if (result.containsKey(key)) {result.get(key).add(elem)} else {val list = new util.ArrayList[String]()list.add(elem)result.put(key, list)}}result}//scala的类实现def sortBy2(arr: Array[String], func: String => String) ={var result = Map[String, ArrayBuffer[String]]()for (elem <- arr) {val key = func(elem)if (result.contains(key)) {result(key) += elem} else {val list = ArrayBuffer[String]()list += elemresult += (key -> list)}}result}

5、定义一个高阶函数,按照指定的规则对数据进行过滤,保留符合要求的数据

 //比如,过滤出偶数def main(args: Array[String]): Unit = {val arr = Array[Int](10, 2, 4, 6, 1, 81, 13)println(filter(arr, _ % 2 == 0).toBuffer)println(filter(arr, _ % 3 == 0).toBuffer)}def filter(arr: Array[Int], func: Int => Boolean) = {for (elem <- arr if func(elem)) yield {elem.toInt}}

scala入门之高阶函数案例相关推荐

  1. scala中的高阶函数_Scala中的高阶函数(HOF)

    scala中的高阶函数 Higher Order Functions (HOF) in Scala are the very core of this functional programming l ...

  2. 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法

    目录 高阶函数用法 作为值的函数 匿名函数 柯里化(多参数列表) 闭包 高阶函数用法 Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是"头等公民",它和Int. ...

  3. Scala中的高阶函数

    Scala混合了面向对象和函数式的特性.在函数式编程语言中,函数是"头等公民",可以像任何其他数据类型一样被传递和操作.每当你想要给算法传入明细动作时这个特性就会变得非常有用.在函 ...

  4. Scala入门到精通——第十三节 高阶函数

    本节主要内容 高阶函数简介 Scala中的常用高阶函数 SAM转换 函数柯里化 部分应用函数 1. 高阶函数简介 高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返 ...

  5. 【Scala之旅】高阶函数

    本节翻译自 Type Inference Higher-order Functions Nested Methods Multiple Parameter Lists (Currying) 综述:Sc ...

  6. Scala高阶函数详解

    概述 高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数. 用函数作为形参或返回值的函数,称为高阶函数. (1)使用函数作为参数 //函数参数,即传 ...

  7. Scala入门到精通——第五节 函数、高阶函数与闭包

    本节主要内容 (一)函数字面量(值函数) (二)匿名函数 (三)函数的简化 (四)函数参数 (四)闭包 函数字面量(值函数) 函数字面量(function literal),也称值函数(functio ...

  8. 【Scala】使用Scala语言对匿名函数、高阶函数的定义以及详细解释(代码加注解)

    下面是匿名函数以及高阶函数相结合使用的代码: object FunDemo3 {/*** 匿名函数.高阶函数*/def main(args: Array[String]): Unit = {val a ...

  9. Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...

    Scala高级特性 1.    学习目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

最新文章

  1. Matlab人脸检测算法详解
  2. 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug
  3. Delegate和Command Pattern
  4. 第十七届全国大学生智能车竞赛开始啦
  5. SpringBoot使用JdbcTemplate
  6. 华为云计算之存储的分类
  7. sshpass做秘钥分发,ansible做自动化运维工具
  8. 位图像素的颜色 携程编程大赛hdu
  9. javascript创建类_如何在10分钟内使用JavaScript创建费用管理器
  10. python删除txt文件第三行_真香!Python十大常用文件操作,轻松办公
  11. 开关造成的毛刺_LED射灯开关关了为什么还会闪
  12. Redis3.2.5 集群搭建以及Spring-boot测试
  13. linux内核编译选项ccl,嵌入式Linux学习笔记(一)
  14. Spark Streaming的Receiver和Direct容错方式
  15. 信息图:iOS 7开发者需要知道的事
  16. openresty入门与配置了解
  17. 数据结构之红黑树简介
  18. 物联网技术体系(一)
  19. html 苹果手机输入法,苹果手机搜狗输入法怎么计算字数?
  20. 程序员能力的四个境界(转)

热门文章

  1. 百度移动关键词排名查询API接口-(api_submit- 百度移动关键词排名查询API接口)
  2. jtdhrsgeagrshtd
  3. HTML5网页设计笔记
  4. 光盘装系统和u盘装系统的区别介绍
  5. ShareASale平台推广
  6. 17种简单有效更快地增加电子邮件列表的方法
  7. 想要精通算法和SQL的成长之路 - 两两交换链表中的节点
  8. 数字图像处理学习笔记 六 彩色图像处理
  9. 【maya】形变编辑器表情控制制作
  10. html自定义序号样式,word设置自定义样式