2019.11.29 scala02

回顾
变量的定义
1.var 修饰的变量是可变的
2.val 修饰的变量是不可变的
3.数据类型:Any(AnyVal(Boolean、Unit)、AnyRef)
4.条件表达式 :if…else if…else
5.循环 for(变量<-表达式/集合/数组;if 守卫)
6.方法的定义,使用关键字def
def 方法名称(参数列表,方法的返回值类型=方法体)
7.函数的定义:=>
方法一:函数的参数列表=>函数体
方法二:函数的参数类型列表=>函数的返回值类型=(函数的参数变量引用)=>函数体
8.传名调用&传值调用
val f=(a:Int,b:Int)=>a+b
add(f,2+8,6){f(10,6)}//10+6
在这里插入图片描述

可变参数

可变参数一般放在参数列表的末尾
参数的默认值:参数定义是可以给定一个默认值,调用时,如果不传递参数,即会使用函数或方法的默认值,如果传递了参数值,则使用传递的参数值
def add(a:Int=6,b:Int=5)={
a+b
}
高阶函数:将其他函数作为参数或其结果是函数的函数
//定义一个方法,参数为带一个整形参数返回值为整形的函数f和一个整形参数v,返回值为一个函数
def apply(f:Int=>String,v:Int)=f(v)
//定义一个方法,参数为一个整形参数,返回值为String
def layout(x:Int)="["+x.toString()+"]"
//调用
ptintf(apply(layout,10))
在这里插入图片描述

部分参数应用函数:如果函数传递所有预期的参数,则表示已完全应用它。
在这里插入图片描述

柯里化函数:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
在这里插入图片描述
偏函数:PartialFuntion[参数类型,返回值类型]

  1. f1=:PartialFuntion[Any,Int]={
    case i:Int=>i*10

}
val arr=ArrayAny
val collect=arr.coleect(f1)
println(collect.toBuffer)
输出:ArrayBuffer(10,20,40)

2.arr.map{case x:Int=>x*10}

数组的定义:定义一个固定长度的数组,长度可变,内容可变
map/flatten/flatMap/foreach方法的使用:
map(映射):
val fx=(x:Int)=>x10
//arr 见过map映射操作之后会返回一个新的数组
val r1=arr.map(fx)
arr.map((x:Int)=>x
10)

flatten(扁平化操作):
val arr1:Areay[String]=Array(“hello hello tom”,“hello jerry”)
//Array(Array(“hello”,“hello”,“tom”),Array(“hello”,“jerry”)
var r2:Array[Array[String]]=arr1.map(_.split(" "))
//Array(“hello”,“hello”,“tom”,“hello”,“jerry”)
r2.flatten
//flaMap=map->flatten

flatMap(先Map再flatten):

arr1.flatMap(_.split(“ ”))

foreach(循环遍历):
arr1.flatMap(_.split(“ ”)).foreach(x=>println(x))
//hello,hello,tom,hello,jerry

groupBy:
arr1.flatMap(.split(“ ”)).groupBy(x=>x)
在这里插入图片描述
mapValues(对键值对每个value都应用一个函数,但是,key不会发生变化。):
arr1.flatMap(
.split(“ ”)).groupBy(x=>x).mapValues(_.length)
在这里插入图片描述

排序操作:
arr1.flatMap(.split(“ ”)).groupBy(x=>x).mapValues(.length).toList.sortBy(x=x.2)(正序)
arr1.flatMap(
.split(“ ”)).groupBy(x=>x).mapValues(_.length).toList.sortBy(x=- x._2)(倒序)

**总结:**求每个单词出现的数量 wordcount
arr1.flatMap(x=x.split(" ")).groupBy(x=>x).mapValues(x=>x.length).toList.sortBy(x=x._2)
在这里插入图片描述

集合的常用操作

scala的集合有三大类:序列seq、集set、映射Map,所有的集合都拓展来着iterable特质,在scala中集合有可变(mutable)和不可变(immutable)两种类型,immutable类型的集合初始化后就不能改变了(注意与val修饰的变量进行区别)
**Array:**内容都可变,分为长度可变数组(ArrayBuffer),长度不可变数组(Array)
HashMap:mutable包下的可变Map
**Seq序列:**在scala中列表要么为空(Nill表示空列表)要么是一个head元素加上一个tail列表。
// 9::LIst(5,2) ::操作符是给定的头和尾创建一个新的列表
:::拼接两个List

fold(折叠):将初始值与LIst叠加
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值