首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Zzreal的大数据笔记-ScalaDay02

昨天整理了一下Scala的一些基本内容,不是很全面,不过作为学习Spark的基础足够了,

如果需要系统的学习Scala,建议还是去菜鸟教程一步步的看下来会比较条理一些,

今天贴一些代码,GitHub的话找时间再上传,最近挺忙,昨天的笔记都差点拖更...

9、Scala代码笔记

import java.util.concurrent.TimeUnit

import Scala.collection.mutable.ListBuffer

/**

* Scala中class相当于java的class

*/

class Day01(name: String, age: Int) {

//main方法

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

// println("Hello World!")

// }

//require() 方法用在对参数的检验上,不通过则抛出 IllegalArgumentException

require(age !=0)

var name1 = name

var age1 = age

private var gender = false

/**

* class Day01(name:String,age:Int) 带参类的声明是这个类的主构造器

* 在类里面可以添加从构造器来定义各种参数不同的构造,参数可以比主构造器多,也可以少。格式为 def this(...)

* 如果从构造器参数比主构造器少,则需要给定比主构造器少的参数的默认值

* 如果从比主参数多,则需要定义变量接收参数的值

*/

def this(name: String) = this(name, 20)

def this(age: Int) = this(" ", age)

def this() = this("M", 1)

def this(name: String, age: Int, gender: Boolean) = {

this(name, age)

this.gender = gender

}

def showInfo() = {

print(name1);

print("-");

print(age1);

print("-");

println(gender)

}

}

/**

* class Day01 和 object Day01 形成伴生对象,两者之间所有的东西都是互通的,包括私有的成员

*/

object Day01 {

/* 方法(函数)定义的格式为 ---> def 方法名(变量:数据类型,变量2:数据类型,...)[:返回值类型]=

返回值类型可以省略 ---> def 方法名(变量:类型)=

返回不需要写return,默认返回代码逻辑的最后一行的值*/

def show(name: String) = {

name.length

}

}

/**

* Scala中的object是静态类,main方法只能写在object中

* 执行程序有两种方法 1)写main方法 2)object 继承App

*/

object Demo extends App {

//Scala中+ - < > : 等很多标识符被方法化,可以直接.()使用

println(1 + 2, 1.

//运行结果:(3,true)

//调用方法可以 类名.方法(参数)或者 类名 方法 参数

println(Day01.show("name"))

println(Day01 show "bitch")

//运行结果:4

// 5

val d = new Day01()

d.showInfo()

d.age1 = 18

d.name1 = "SB"

d.showInfo()

new Day01("GG", 1, true).showInfo()

//运行结果:M-1-false

// SB-18-false

// GG-1-true

//while 做循环,if做判断来实现java中的break和continue操作

var flag = true

var m = 1

while (flag) {

m += 1

if (!(m > 10 && m < 100)) {

println(m)

}

if (m > 200) flag = false

}

//for循环遍历字符串

"string".foreach(println)

//类似java中的增强for

for (a

//定义数组的两种方式

val arr = new Array[String](3)

arr(0) = "a"

arr(0) = "b"

arr(1) = "a"

arr(2) = "a"

val arr1 = Array.apply(1, "a", "b", "c", 1, true)

println(1 == arr1(0))

//运行结果:true

//mkString遍历集合,以“,”分隔

println(arr1.mkString(","))

//运行结果:1,a,b,c,1,true

val x = ListBuffer[Any]()

x.append(1, 2, 3, 4, 5)

x.append(3, 4, 5, 5, 6)

x.toList

val list = List[Any]("a", "c", 1, true)

// “:::”只能用于连接两个List类型的集合

println(List(1) ::: list)

// “::” 把新元素添加到现有列表的最前端

println(1 :: list :: 1 :: Nil)

println(list)

//运行结果:List(1, a, c, 1, true)

// List(1, List(a, c, 1, true), 1)

// List(a, c, 1, true)

val pair = (1, 2, 3, 4, 5, "a")

//._1表示1索引上的内容,._2表示2索引上的内容

println(pair._1, pair._2)

//运行结果:(1,2)

val list1 = List("a b", "c d", "f")

list1.flatMap(_.split(" ")).foreach(println)

//运行结果:a

// b

// c

// d

// e

// f

/**

* 传值函数与传名函数

* 传值函数值执行一次参数中的方法,将返回值作为参数调用主函数

* 传名函数先执行主函数,遇到参数的时候执行一次参数里的函数,遇到几次执行几次

* 高阶函数相似于传名函数,传名不带参数,高阶带参数

*/

def time() = {

println("获取时间,单位为纳秒")

var time = System.nanoTime

println(time)

time

}

def delayed( t: => Long ) = {

println("在 delayed 方法内")

println("参数: " + t)

TimeUnit.SECONDS.sleep(10)

t

}

println(delayed(time()))

//运行结果:在 delayed 方法内

// 获取时间,单位为纳秒

// 28315735518822

// 参数: 28315735518822

// 获取时间,单位为纳秒

// 28325736472328

// 28325736472328

//函数--可变参数

def show(f:Int*): Unit =println(f.mkString(","))

show(1,2,444,1111,8)

show(1,2,444,1111,8,8)

//运行结果:1,2,444,1111,8

// 1,2,444,1111,8,8

/**

* assert() 或 assume() 方法在对中间结果或私有方法的参数进行检验,不成功则抛出 AssertionError 异常,

* 至于是用 assert() 或是 assume() 方法,就各取所好了,Scala 给出的原则如下:

* This method differs from assert only in the intent expressed:

* assert contains a predicate which needs to be proven, while assume contains an axiom for a static checker

* 说的是 assert() 包含一下需证明的条件,assume() 代表的是一个公理性的论断。

*/

val dd = new Day01()

assert(dd.name1 != "M")

dd.showInfo()

//Exception in thread "main" java.lang.AssertionError: assertion failed

}

2、Scala的隐式转换(懒得自己哔哔,参照博客来学吧,反正号主也忘了...隐式转换很重要!很重要!很重要!)

http://www.cnblogs.com/MOBIN/p/5351900.html

3、Akka(学习spark需要了解这个)

https://www.iteblog.com/archives/1156.html

以上内容均为作者个人笔记,如有错误欢迎指正...

关注CSDN博客 Zonzereal,更多大数据笔记等你...

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171221G013SE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券