上一节,我们讲了scala的安装的即一些初步方法,今天,我们来介绍一下scala里面的一些基本操作

  1.对于map的的编写,这个是广泛用于Array里面的

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

    arr.map(_*2),则arr的数组中的每一项都*2

  2.对于从0-9找出偶数

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

    第一种:arr.filter(x=>x%2==0)

    第二种:arr.filter(_%2==0)

    第三种:arr.filter(_%2==0).map(_*10):支持链式计算

  3.在scala中,数组并不是只有一维的,也可能会有类似于Array[(String,Int)]

    val arr = Array(("a",1),("b",2))

  4.对于List来说,如果我们是加上一个元素,则可以是+=,

    如果要是加上一个集合,则是++=

    val list1 = List(1,2,3)

    list1 += 4

    val list2 = List(5,6,7,8)

    list1 ++= list2

  5.在scala中,对于import scala.collection.immutable,不可变序列,

    对于import scala.collection.mutable._,可变序列

  6.wordsCount的练习

    第一步:val words = List("Hello tom hello jerry",

    "Hello tom kitty","Hello")

    第二步:words.map(_.split(" ")) 

      List[Array[String]] =

      List(Array(Hello,tom,hello,jerry),

      Array(Hello,tom,kitty),Array(Hello))

    第三步:words.map(_.split(" ")).flatten

      List[String] = List(Hello,tom,hello,

      jerry,Hello,tom,kitty,Hello)

    或者我们可以这样想:

      val words1 = words.flatMap(_.split(" "))

      List[String] = List(Hello,tom,

      hello,jerry,Hello,tom,kitty,Hello)

    第四步:val wordsAndOne = words1.map((_,1))

      wordsAndOne:List[(String,Int)]

      =List((Hello,1),(tom,1),(Hello,1),

      (jerry,1),(Hello,1,(tom,1),

      (kitty,1),(Hello,1))

    第五步:val grouped = wordsAndOne.groupBy(_._1)

      grouped: scala.collection.immutable.

      Map[String,List[(String, Int)]] =

      Map(kitty -> List((kitty,1)),

      tom -> List((tom,1), (tom,1)),

      Hello -> List((Hello,1), (Hello,1), (Hello,1)),

        hello -> List((hello,1)), jerry -> List((jerry,1)))

    第六步:由于上一步的里面装的map里面是一个元组,

      val result = grouped.map(t=>(t._1,t._2.size))

      result:scala.collection.immutable.Map[String,Int]

      = Map(Kitty->1,tom->2,Hello ->3,hello -> 1, jerry ->1)

    第7步:对其进行排序操作(从高到低)

      val finalResult = result.toList.sortBy(_._2).

      reverse(因为map不支持_的操作,所以我们把它变为List)

      finalResult:List[(String,Int)] = List((Hello,3),(tom,2),

      (jerry,1),(hello,1),(kitty,1))

    关于wordCount计数的简便写法:

      val lines = List("hello tom hello jerry", "hello jerry",

      "hello kitty")

      第一种方法:lines.flatMap(_.split(" ")).map((_, 1)).

      groupBy(_._1).

      mapValues(_.foldLeft(0)(_+_._2))

      第二种方法:lines.flatMap(_.split(" ")).map((_, 1)).

      groupBy(_._1).

      map(t=>(t._1, t._2.size)).toList.sortBy(_._2).reverse

  7.只有List的情况下我们才可以使用_的操作,mapValues是对value的操作

  8.foldLeft的可以进行一次相加

    对于group: scala.collection.immutable.

    Map[String,List[(String, Int)]]

    = Map(kitty -> List((kitty,1)), tom -> List((tom,1), (tom,1)),

    Hello -> List((Hello,1), (Hello,1), (Hello,1)),

     hello -> List((hello,1)), jerry -> List((jerry,1)))

    命令:group.mapValues(_.foldLeft(0)(_+_._2))

    则之后的结果是:res34: scala.collection.immutable.

    Map[String,Int]

    =Map(kitty -> 1, tom -> 2, Hello -> 3, hello -> 1, jerry -> 1)

    综上所述:foldLeft(0),初始值是0,从左到右一次相加

  9.如果一个类是用private修饰,则只能在伴生对象里面访问

   (就是两个类的名称要一样),如果是private[this],

     则这个只能在类里面使用,

    就像java一样,private[test],这个是说在test以及test的

   子包下可以访问

  10.scala中的构造函数也是独特

    class People(val id:String,var name:String){},

    此时这个就是一个构造函数

  11.其实scala中的object是单例模式,如果是 

    val d1 = Dog(), val d2 = Dog(),val d3

    = new Dog(),val d4 = new Dog(),

    则d1!=d2,d3!=d4.d1与d2会调用apply的方法,

    其实也是相当于new了一个类,              

    但是对于val d5= Dao,val d6= Dog,那么d5与d6就会相同,

    应为默认object Dog是单例模式

scala初体验-02的更多相关文章

  1. Scala初体验

    因为工作中要用到Scala了,本来前面自己还在学习Storm的,没有办法,先把Scala和Spark的这些内容学完在回去看Storm吧! 既然我们要学习Scala,那么我们不禁的要问了,什么是Scal ...

  2. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  3. Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. Java8初体验(一)lambda表达式语法

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...

  5. .NET自带IOC容器MEF之初体验

    .NET自带IOC容器MEF之初体验   本文主要把MEF作为一种IOC容器进行讲解,.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuil ...

  6. Java8初体验(1):lambda表达式语法

    原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...

  7. Online开发初体验——Jeecg-Boot 在线配置图表

    Online开发——初体验(在线配置图表) 01 通过JSON数据,快速配置图形报表 02 通过SQL数据,快速配置图形报表 03 图表模板配置,实现不同数据源图表合并展示 04 图表布局,支持单排. ...

  8. #使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验

    #使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验 一.续上前言 关于这个小玩意的产品思考,假设我暂时把他叫我是月老热心人 这是一个没有中心的关系链,每个人进入以后都是以自己为中 ...

  9. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

随机推荐

  1. Elmah 数据库脚本

    /* 错误管理工具 SQL代码 */ CREATE TABLE dbo.ELMAH_Error ( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVA ...

  2. 开发中常用的sql语句二

    sql 数字全角半角转换 create FUNCTION dbo.ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) A ...

  3. Oracle数据库基本语句练习

    以ORACLE数据库为主提纲:第一部分.SQL语言基础 第一章:Oracle命令类别及sql简单语法介绍第二章:oracle的基本函数第三章:oracle的数据类型第四章:多表连接技术 第二部分.or ...

  4. Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)

    project 编译问题,需要三处的jdk版本要保持一致,才能编译通过. 1.在项目上右键properties->project Facets->修改右侧的version  保持一致 2. ...

  5. 来自NVIDIA开源的pix2pixHD,将Image-to-Image Translation带到了另一个境界

    Kuo Ming Lin 分享了 Learning By Hacking 的动图 最近討論最火熱的project之一,來自NVIDIA開源的pix2pixHD,將Image-to-Image Tran ...

  6. C#中生成随机数的几种方法

    Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数 Random rd = new Random() rd.next(,)(生成1~1 ...

  7. DOM笔记(十一):JavaScript对象的基本认识和创建

    一.什么是对象? 面 向对象(Object-Oriented,OO)的语言有一个标志,那就是都有类的概念,例如C++.Java等:但是ECMAScript没有类的概 念.ECMAScript-262把 ...

  8. [Linux发行版] 常见Linux系统下载(转)

    本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...

  9. Gym 100169A 最短路

    题意:不久后滑铁卢将会变得非常冷,但是幸运的是,很多建筑都被桥梁和隧道连接着,所以你不需要总是走在外面.但是现在建筑 物之间的连接是错综复杂的,很难知道某两个建筑物之间的最优路线,所以需要你写程序判断 ...

  10. 在Centos上面用yum不能安装redis的朋友看过来

    我得是centos 6.3,如果直接用yum安装redis,报错,如下:[root@CentOS6 etc]# yum install redisLoaded plugins: fastestmirr ...