具体见第三阶段scala-day01中的文档(scala编程基础---基础语法)

 1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html):

  • 将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程。

  我们可以看到,函数式编程中,函数不仅直接调用,也可以当成参数被其他函数调用。因此,进一步,如果我不仅想把函数当参数,还想传入值,所以再封装一下,函数和值封装后是什么。

  • 函数->行为
  • 值->属性

没错这就是对象

  • 将业务逻辑细化,抽象,封装成一个个对象,并借助语言,库,组件,框架等,将整个业务流程转化为对象之间的相互调用,这就是面向对象编程。

因此,这么看来,函数式跟面向对象的思想其实都是一致的,即对逻辑的抽象与封装。

原点:

回顾下语言的历程

过程式->函数式->面向对象

近年来大数据的兴起,数据的处理往往跟面向对象没关系,更多的是简单而大量的数据结构,借助mapreduce这样的高阶函数处理更加方便,这也是函数式编程又火起来的原因。

程序只不过是回到了它的原点:

算法+数据结构->函数+高阶函数+数据。

  

下面笔记来源:https://www.zhihu.com/question/28292740

 2. for 循环

(1) 重点:守卫模式和推导式

  • 守卫模式
for(i <- 1 to 10 if i >3){满足条件的执行此逻辑}
  • 推导式
  def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 4, 6, 5)
val new_arr = for(i <- arr if i >3) yield i*2 //推导式
println(new_arr.toBuffer)
}
}

(2)可变参数

/**
* 可变参数
*/ object Demo2 {
def main(args: Array[String]): Unit = {
operation("hello","spark","hadoop","flink")
}
def operation(s:String*): Unit ={
s.foreach(x=>println(x))
}
}

(3)三种遍历模式如下:

  • 第一种:相当于java中的增强for循环
// 第一种:增强for循环的遍历方式
val arr = Array(1, 2, 3, 4, 6, 5)
for (elem <- arr) {
println("第一种遍历方式:"+elem)
}
  • 第二种:角标索引的方式
  // 第二种:角标索引的方式
for (index <- arr.indices) { // 此处的arr.indices相当于:0 util arr.length
println("第二种遍历方式:"+arr(index))
}
  • 第三种:调用foreach方法,此种适合校验
// 第三种:调用foreach方法,此种适合校验
arr.foreach(e=>print("第三种遍历方式:"+e))
}

3. 数组中常用的方法

 * 1 update(index,newVal)  更新元素
* -------2 reverse 空参的方法 将数组反转
* 3 reduce 每个元素累计操作 聚合操作
* 4 max 获取数组中的最大元素
* 5 min 获取数组中最小的元素
* -------6 sorted 将数组中的元素按照默认的排序 数值(小--->大) 字符串(字段的先后排序) 自定义的类???
* 7 exists 判断是否有符合要求的元素
* 8 drop(num) 从0的位置删除n个元素(dropright(num)表示从尾部删除n个元素)
* -------9 distinct 去除数组中重复的元素
* -------10 sum 求和
* -------11 map 遍历数组中的每个元素 分别处理 将处理的结果返回到一个新的数组中(map(f:Int=>B)  map(f:String=>{})  B block,即为代码块)
* -------12 foreach 遍历数组中的每个元素 没有返回值 一般用于打印(foreach[U](f:Int=>U),此处的U即为Unit)
* -------13 contains(elem) 判断数组中是否包含某个元素
* -------数组的定义
* -------数组的遍历
*/

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法的更多相关文章

  1. 大数据学习--day13(字符串String--源码分析--JVM内存分析)

    字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...

  2. 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)

    1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...

  3. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  4. 大数据学习(一) | 初识 Hadoop

    作者: seriouszyx 首发地址:https://seriouszyx.top/ 代码均可在 Github 上找到(求Star) 最近想要了解一些前沿技术,不能一门心思眼中只有 web,因为我目 ...

  5. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  6. 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF

    1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...

  7. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  8. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  9. 大数据学习系列之六 ----- Hadoop+Spark环境搭建

    引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...

随机推荐

  1. Forest v1.5.12 发布,声明式 HTTP 框架,已超过 1.6k star

    Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...

  2. vim 脚本,自动添加文件头部信息

    相信很多人编写脚本的时候都会在脚本头部写一些信息,记录文件生成时候,生成人姓名等 建议在自己的家目录下的 .vimrc 文件 下添加以下内容 [ autocmd BufNewFile *.sh exe ...

  3. 【python】使用python十分钟创建个人聊天机器人教程

    以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...

  4. Java多线程| 01 | 线程概述

    Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...

  5. 大爽Python入门教程 0-4 安装Pycharm

    大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...

  6. 基于EPPlus和NPOI实现的Excel导入导出

    基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...

  7. List<Object>

    ... package str; import java.util.ArrayList; import java.util.List; public class arrayText { public ...

  8. Nginx支持WebSocket反向代理

    WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择.其为HTML5的一部分,WebSocket相较于原来开发这类app的 ...

  9. 14-2-Unsupervised Learning ----Word Embedding

    Introduction 词嵌入(word embedding)是降维算法(Dimension Reduction)的典型应用 那如何用vector来表示一个word呢? 1-of-N Encodin ...

  10. 《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)

    1.简介   这一篇宏哥主要介绍webdriver在IE.Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打 ...