scala初体验-02
上一节,我们讲了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的更多相关文章
- Scala初体验
因为工作中要用到Scala了,本来前面自己还在学习Storm的,没有办法,先把Scala和Spark的这些内容学完在回去看Storm吧! 既然我们要学习Scala,那么我们不禁的要问了,什么是Scal ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Java8初体验(一)lambda表达式语法
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...
- .NET自带IOC容器MEF之初体验
.NET自带IOC容器MEF之初体验 本文主要把MEF作为一种IOC容器进行讲解,.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuil ...
- Java8初体验(1):lambda表达式语法
原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...
- Online开发初体验——Jeecg-Boot 在线配置图表
Online开发——初体验(在线配置图表) 01 通过JSON数据,快速配置图形报表 02 通过SQL数据,快速配置图形报表 03 图表模板配置,实现不同数据源图表合并展示 04 图表布局,支持单排. ...
- #使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验
#使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验 一.续上前言 关于这个小玩意的产品思考,假设我暂时把他叫我是月老热心人 这是一个没有中心的关系链,每个人进入以后都是以自己为中 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
随机推荐
- 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据
大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤. 文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字: TeeC ...
- Android 接入支付宝支付实现
接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...
- Git学习笔记day01 从GitHub克隆版本库
本期Git教程将会带您进入Git的世界,这是您使用分布版本控制工具Git的开端,祝您学习顺利! 步骤一 在Linux系统中下载Git 如果是Ubuntu系统,在shell中输入指令 sudo apt ...
- mysql:JDBC url 参数详解
MySql链接url参数详解 jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... ...
- 实现vmare虚拟机系统随主机开机自动启动
服务器主机上的虚拟机每次开机要手动启动是很麻烦的事,so,在网上找到一方法让虚拟机随主机开机自动运行:挺方便的,记录下来: 1.操作环境 主机:windows 2003 虚拟机:centos6 2.下 ...
- 批处理实现虚拟WIFI
类似于360免费WiFi那个软件,可以PC发射WiFi(需要有无线网卡). 源码如下: @Echo off title Windows7 虚拟Wifi----By yllinux mode con c ...
- C4C和Outlook的集成
从C4C系统下载Outlook的Addin, 安装之后,会在Outlook里看见一个新的面板: 点击Log On登录: 如果需要的话,在Settings里设置proxy. 登录之后,即可立即在outl ...
- DedeCms中出现Safe Alert: Request Error step 1/2 的解决方法
dedecms安全警告:Safe Alert: Request Error step 2!不知道大家有没有发现这个现象.只从Dedecms官方公布了之前的版本有严重的漏洞以来,现在在仿站的时候都是采用 ...
- 火车进站输出路径(HDU1022)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 解题报告: 思路: 就是维护好这个栈,只要它不是空,并且头部和ans相同,就一直出栈,直到不满足 ...
- 2017.11.10 web中URL和URI的区别
URI:Uniform Resource Identifier,统一资源标识符: •URL:Uniform Resource Locator,统一资源定位符: •URN:Uniform Resourc ...