Scala--第四天

一、迭代器 iterator

  适合Scala中所有集合的遍历

 1     var a = List(1, 2, 3, 4)
 2     var b = a.iterator
 3     //hasNext:判断迭代器是否由下一个元素   next:获取下一个元素
 4     while (b.hasNext) {
 5       println(b.next)
 6     }
 7     //结果
 8     //1
 9     //2
10     //3
11     //4

二、函数式编程

  用处:Scala 针对集合的操作,简化代码

  1.遍历 froeach

1     //完成写法  foreach 中传的是一个函数 :x代表集合(容器)中的每一个元素
2     //注意:foreach没有返回值 ,即为Unit
3     a.foreach((x: Int) => {
4       println(x)
5     })
6     //简化写法一:省去参数的类型指定 ,scala做类型推断
7     a.foreach(x => println(x))
8     //建议写法二:使用下划线 代替 集合中的每个元素
9     a.foreach(println(_))

  2.映射 Map

    格式:原始集合.map(f:(A))  #A:代表集合中的每个元素  

      返回值是一个新的集合

1     var a = List(1, 2, 3, 4)
2     //每个集合中的元素+1 得到新的集合
3     var b = a.map(x => x + 1)
4     println(b)
5     var c = a.map(_ + 1)
6     println(c)
7     //List(2, 3, 4, 5)
8     //List(2, 3, 4, 5)

  3.映射扁平化(降维处理) flatmap

    格式:原始集合.flatMap(f:(A))

    返回值:一个新的集合

 1     var a = List("cmx01 cmx02", "cmx03 cmx04")
 2     //正常的思路与写法
 3     var b = a.map(_.split(" ")).flatten
 4     //    println(b)
 5     //List(cmx01, cmx02, cmx03, cmx04)
 6     //flatMap 简化
 7     var c = a.flatMap(x => {
 8       x.split(" ")
 9     })
10     println(c)
11     //List(cmx01, cmx02, cmx03, cmx04)
12     var d = a.flatMap(_.split(" "))
13     println(d)
14     //List(cmx01, cmx02, cmx03, cmx04)

  4.过滤 filter 按照一定的规则,对集合中的元素进行过滤

    格式:原始集合.filter(p:(A))=>Boolean

    返回值:一个新集合

 1     var a = List(1, 2, 3, 4, 5, 6, 7)
 2     //过滤偶数
 3     var b = a.filter(x => {
 4       x % 2 == 0
 5     })
 6     println(b)
 7     //过滤奇数,并使用简便的写法
 8     var c = a.filter(_ % 2 == 1)
 9     println(c)
10     //List(2, 4, 6)
11     //List(1, 3, 5, 7)

  5.是否存在 exists

1     var a = List(1, 2, 3, 4, 5, 6, 7)
2     println(a.exists(_==3))
3     //true

  6.排序sorted sortBy sortWith

 1     var a = List(9, 6, 4, 3, 5, 2, 1)
 2     //默认排序 升序
 3     var b = a.sorted
 4     println(b)
 5     //List(1, 2, 3, 4, 5, 6, 9)
 6
 7     //根据指定元素进行排序
 8     var c = List("cmx 1", "zzz 2", "uuu 3")
 9     var d = c.sortBy(_.split(" ")(0))
10     println(d)
11     //List(cmx 1, uuu 3, zzz 2)
12
13     //自定义排序sortWith
14     //降序排列 大于号 降序  小于号 升序
15     var e = a.sortWith(_ > _)
16     println(e)
17     //List(9, 6, 5, 4, 3, 2, 1)
18
19     //注意简写的 _  不能出现再 if 判断里
20     var f = a.sortWith((x, y) => {
21       if (x < y) true else false
22     })
23     println(f)
24     //List(1, 2, 3, 4, 5, 6, 9)

  关于 _ 的小结

  1.下划线 不能出现在 if 判断中

  2.当函数的参数,只在函数体中出现一次,并且函数体没有嵌套调用

  7.分组 groupby

 1     var a = List(("cmx", 1), ("cmx01", 1), ("xxx", 0))
 2     //需求 分组统计 0,1 的个数
 3     var b = a.groupBy(_._2)
 4     println(b)
 5     //打印的结果为一个Map
 6     //Map(1 -> List((cmx,1), (cmx01,1)), 0 -> List((xxx,0)))
 7     for (i <- b) println(i)
 8     //循环打印的结果却是元组
 9     //(1,List((cmx,1), (cmx01,1)))
10     //(0,List((xxx,0)))
11
12     var c = b.map(x => x._1 -> x._2.length)
13     println(c)
14     //Map(1 -> 2, 0 -> 1)
15     c.foreach(println(_))
16     //(1,2)
17     //(0,1)

原文地址:https://www.cnblogs.com/cmxbky1314/p/12283479.html

时间: 2024-11-06 16:50:01

Scala--第四天的相关文章

Scala学习(四)---映射和元组

映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组,即n个对象的聚集,并不一定要相同类型的.对偶不过是一个 n=2的元组,元组对于那种需要将两个或更多值聚集在一起时特别有用.本篇的要点包括: 01. Scala有十分易用的语法来创建.查询和遍历映射. 02. 你需要从可变的和不可变的映射中做出选择. 03. 默认情况下,你得到的是一个哈希映射,不过你

Scala学习(四)练习

映射和元组&练习 1. 设置一个映射,其中包含你想要的一些装备,以及它们的价格.然后构建另一个映射,采用同一组键,但在价格上打9折 映射代码如下: object HelloScala{ def main(args: Array[String]): Unit = { val map=Map("Computer"->3000,"Iphone"->2000,"Cup"->10) val fold=for((k,v)<-m

scala 基础四 scala 的函数扩展 默认参数,不定长参数,带名参数

默认参数,默认参数就是在函数定义的时候直接给函数的入参进行赋值 package smart.iot class func { } object func { //参数默认值 格式 参数:参数类型="要设置的默认值" def funcadd(str:String="hello scala!") { println(str); } def main(args: Array[String]): Unit = { funcadd() } } 输出:hello scala!

大数据学习之Scala中main函数的分析以及基本规则(2)

一.main函数的分析 首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下.有助于后面的学习 object HelloScala { def main(args: Array[String]): Unit = { println("I Love You Scala"); } } 如图所看到的,在Scala中能够使用object和class分别定义一个类.两者还是存在一些区别.以后我会在专门的博客中给予介绍. 在Scala中定义一个函数使用:def 来修饰 完整定义一个函数为

Scala系统学习(三):Scala基础语法

如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合.现在我们简单地看一下类,对象,方法和实例变量的含义. 对象 - 对象有状态和行为.一个对象是类的一个实例.例如 - 狗有状态:颜色,名称,品种,它行为有:摇摆,吠叫和吃东西. 类 - 可以将类定义为描述与该类相关的行为/状态的模板/蓝图. 方法 - 一个方法基本上是一种行为.一个

spark大数据处理之hello world

Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,关于它的介绍网上随便一搜都是一大堆,在此就不再赘述了. Spark的开发是基于scala语言的,属于java和js的综合体,知晓java及js的同学应该都是很容易上手的. 开发一个spark的程序一般用专门的IDE,叫做Scala IDE for Eclipse,和开发java的界面差不多. 下面我们就用图文来说明,如何开发出第一个spark的程序.

Spark 3000门徒第四课scala模式匹配和类型参数总结

今晚听了王家林老师的Spark 3000门徒系列第四课scala模式匹配和类型参数,总结如下: 模式匹配:def data(array:Array[String]){ array match{ case Array(a,b,c) => println(a+b+c) case Array("spark",_*) => //匹配以spark为第一元素的数组 case _ => ... }} 课后作业是: 阅读Spark源码 RDD.HadoopRDD.SparkConte

大数据笔记(二十四)——Scala面向对象编程实例

===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 class) 面向对象的特征: (1)封装 (2)继承 (3)多态 二.定义类: class,没有类的修饰符: public.protected.private class Student1 { //定义属性 private var stuName:String = "Tom" privat

Scala系统学习(四):Scala变量

变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数,小数或字符. 变量声明 Scala具有用于声明变量的不同语法.它们可以被定义为值,即常数或变量. 这里,myVar使用关键字var声明. 它是一个可以改变值的变量,这称为可变变量. 以下是使用var关键字定义变量的语法 - 语法 var myVar : String = "Foo&qu

Scala函数式编程(四)函数式的数据结构 下

前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结构 上 1.List代码解析 今天介绍的内容,主要是对上一篇介绍的scala函数式数据结构补充,主要讲代码.可以先看看上一节,主要讲的是函数式的list,Scala函数式编程(四)函数式的数据结构 上.这些代码我都放在我的公众号里面,包括函数式的List以及一个函数式的二叉搜索树,关注公众号:哈尔的