scala函数,方法,数组,集合基础使用说明

scala的高阶函数

1、函数和方法二则都是在定义逻辑

方法

def sum_m(a:Int,b:Int):int=a+b

函数

val sum_f:(Int,Int)=>Int=(x,y)=>x+y

函数和方法可以互换

方法可以转为函数:

val f1=sum_m

函数可以转为方法:

def m1=sum_m

2、高阶函数的定义

(方法|函数)f可以作为(方法|函数)ff的参数,也可以作为(方法|函数)ff的返回值

方法和函数就是执行逻辑

高阶函数的通俗解释

1、可以把一段逻辑当做参数,传递给另一段处理逻辑

2、也可以让某一段处理逻辑的返回值,就是一个函数

方法可以作为方法的参数

函数可以作为方法的参数

方法可以作为函数的参数

函数可以作为函数的参数

方法可以作为方法的返回值

函数可以作为方法的返回值

方法可以作为函数的返回值

函数可以作为函数的返回值

object Basics_Day01 {

  def main(args: Array[String]): Unit = {

//调用m1方法传入f1函数

val  a= m1(f1)

println(a)

//调用m1方法传入f2函数

val a1=m1(f2)

println(a1)

//调用m2方法传入f1函数

val  b= m2(f1,2,4)

println(b)

//调用m2方法传入f2函数

val b1=m2(f2,3,4)

println(b1)

//调用m2方法传入m3函数

println(m2(m3,2,4))

}

  /**定一个方法

* 方法的参数是个函数,函数的参数是两个int类型

* 返回值为int类型

*/

  def m1(f:(Int,Int)=>Int):Int=f(1,2)

  //定义一个计算数据可变的函数

  def m2(f:(Int,Int)=>Int,x:Int,y:Int):Int=f(x,y)

  //定义一个需要两个Int类型参数的方法

  def m3(a:Int,b:Int):Int=a+b

  //定义一个函数,参数类型是两个int类型,返回值是一个int类型

  val f1=(x:Int,y:Int)=>x+y

  val f2=(a:Int,b:Int)=>a*b

}

数组

定长数组

package com.liu.meng.day13

/**

  * scala的数组的学习

  * 定长定长数组和可变数组

  * 定长数组Arrray

  * 定长数组没有add,inster,remove操作只能修改某个位置的元素的值,要实现删除

  * 可以通过过滤生成新的 Array 的方式来删除不要的元素

  * 可变数组ArrayBuffer

  * 可变数组可以进行增加,删除等操作

  *

  * 定长数组和可变数组之间的转换 通过调用toBuffer()和toArray()来实现

  *

  */

object ArrayClass {

  def main(args: Array[String]): Unit = {

//初始化一个数组

val arr=Array(1,2,3,4,5,6,7,8)

//增强for循环

for (i<-arr){

  println(i)

}

println("=============================")

//使用to可以生成一个序列作为脚标

for (i<-(0 to arr.length-1)){

  println(arr(i))

}

println("=============================")

for (i<-(0 until arr.length)){

  println(arr(i))

}

println("=============================")

//步长为2

for (i<-0 until (arr.length,2)){

  println(arr(i))

}

println("=============================")

//反转

for (i<-(0 until arr.length).reverse){

  println(arr(i))

}

println("=============================")

            //数组转换将偶数取出乘以10以后在生成一个新数组

val res=for (e<-arr if e%2==0)yield e * 10

println(res.toBuffer)

println("===============")

//更高级写法,filter 是过滤,接收一个返回值为boolean的函数

//map相当于将数组中的每一个元素取出来,应用传进去的函数

val r=arr.filter(_%2==0).map(_*10)

println(r.toBuffer)

//数组中的常用算法

//求和

println(arr.sum)

//最大值

println(arr.max)

//最小值

println(arr.min)

//返回带有集合元素信息的集合名称

println(arr.toString)

//数组转为字符串

println(arr.mkString())

//数组转为字符串指定分隔符

println(arr.mkString(“,”))

//数组转为字符串指定分隔符和前后标记

println(arr.mkString(“<”,“,”,“>”))

  }

}

集合

不可变集合

  package com.liu.meng.day13

/**

  * scala集合简单操作

  * scala集合有三大类序列Seq,集合Set,映射Map所有集合都扩展自iterable特质

  * scala集合有可变(mutable)和不可变(immutable)两种类型

  *

  *

  */

object AggregateClass {

  def main(args: Array[String]): Unit = {

/**List序列

*在scala中列表要么为空(NIl表示空列表)要么是一个head元素加上一个tail列表

*9::List(5,2) ::操作符是将给定的头和尾创建一个新的列表

*注意 ::操作符是右结合的,例如9::5::2::NIL相当于9::(5::(2::Nil))

*/

  //创建集合

val list1=List(1,2,3)

val list2=0::list1

val list3=list1.::(0)

val list4=0+:list1

val list5=list1.+:(0)

val list6=list1:+3

val ls0=List(4,5,6)

//集合合并

val ls2=ls0++list1

//将list1插入到ls0前

val ls3=ls0++:list1

//将list1插入到ls0前

val ls4=list1.:::(ls0)

println(ls4)

//取列表最后一个元素

println(list1.last)

//取除了最后一个元素以外的元素

println(list1.init)

//反转

println(list1.reverse)

//截取前n个元素

println(list1.take(2))

//丢弃前n个元素

println(list1.drop(1))

//分割成2列表有第一个列表有n个元素

println(ls4.splitAt(4))

  //输出

println(list1.toString())

//转为String

println(list1.mkString)

//转为数组

println(list1.toArray.toBuffer)

  }

}

可变列表

        package com.liu.meng.day13

import scala.collection.mutable.ListBuffer

/**

  * 可变列表List

  */

object ArregateClass1 {

  def main(args: Array[String]): Unit = {

//创建可变列表

val list0=ListBuffer[Int](1,2,3)

//创建空的可变列表

val list1=new ListBuffer[Int]

//向集合中追加元素和、未生成新的集合

list1+=4

list1.append(5)

//将list1中的元素追加到list0中,未生成新的集合

list0++=list1

//生成新集合

val  list2=list0++list1

val list3=list1:+5

  }

}

Set集合

package com.liu.meng.day13

import scala.collection.immutable.HashSet

import scala.collection.mutable

/**

  * set集合

  */

object AggregateSet extends  App {

//不可变set

val set1=new HashSet[Int]()

//生成新的Set

val set2=set1+4

//set中的元素不能重复

val set3=set2++Set(5,6,7)

val set4=Set(1,3,4)++set1

println(set4)

  //创建一个可变的 HashSetval

  val  set5 = new mutable.HashSet[Int]()

  //向 HashSet 中添加元素

  set5 += 2

  //add 等价于+=

  set5.add(4)

  set5 ++= Set(1,3,5)

  println(set1)

  //删除一个元素

  set5 -= 5

  set5.remove(2)

  println(set5)

}

MAP集合

package com.liu.meng.day13

import scala.collection.mutable

object MapClass  extends  App {

  //创建Map

val map1=new mutable.HashMap[String,Int]()

  //向map中添加数据

  map1.put("aa",1)

  map1("b")=2

  map1+=(("c",1))

  println(map1)

  //移除数据

  map1-="aa"

  map1.remove("b")

  println(map1)

  //修改数据

  map1("c")=100

  println(map1)


}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • 数组 :new Array[Int](8)与Array[Int](8)的区别:第一种8个元素,第二个定义一个值为8...
    夙夜M阅读 1,775评论 1 2
  • 3.数组、映射、元组、集合 3.1数组 3.1.1定长数组和变长数组 object ArrayDemo {def ...
    G__yuan阅读 524评论 0 2
  • Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable coll...
    时待吾阅读 5,823评论 0 4
  • 1、方法的定义//def用来表示定义一个方法,m1表示方法名,(x:Int,y:Int)是参数列表(参数名:参数类...
    printf200阅读 332评论 0 0
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,599评论 0 9