专栏首页大数据Zzreal的大数据笔记-ScalaDay02

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,更多大数据笔记等你...

本文来自企鹅号 - 全球大搜罗媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python学习笔记(八)-四个小程序

    # 字符串格式化符号说明 # %c 格式化字符及其ASCII码 # %s 格式化字符串 # %d 格式化整...

    企鹅号小编
  • 代码注入技术Process Doppelgänging利用介绍

    0x00 前言 在最近的BlackHat Europe 2017,Tal Liberman和Eugene Kogan介绍了一种新的代码注入技术——Process...

    企鹅号小编
  • 【Python】冒泡排序

    在本科学C++的时候,一个最有意思的程序就是冒泡啦,还记得那可是让无数人摸不清头脑,抓狂到喷血的程序,的确很容易一时转不过来,不过一想通的话马上就觉得代码真的是...

    企鹅号小编
  • Scala 学习之面向对象(3)

            ---> 伴生类和伴生对象    object 相当于 Java 中的 static

    py3study
  • Scala学习笔记(二)

    声明类(一个源文件中可以包含很多public的类) getter和setter 构造函数(主构造器和附属构造器) 继承(extends) 重写父...

    chaplinthink
  • 深圳大数据培训学习:继承--【千锋】

    也可以把单个方法或者字段声明为final,以确保它不能被重写,注意和Java的不同,Java中final修饰的字段意味着不可变。

    深圳java培训技术
  • JavaNote[004] - 选择结构

    这个也很好理解,其语法结构为:if(布尔表达式){语句块1} else {语句块2}

    Sam Gor
  • Python 创建二维列表list

    原因:matrix = [array] * 3操作中,只是创建3个指向array的引用,所以一旦array改变,matrix中3个list也会随之改变。

    py3study
  • 《Monkey Java》课程3.2之练习课

    GitOPEN
  • 又一个布局利器, CSS 伪类 :placeholder-shown

    一般我们常见placeholder伪类选择器用来修改默认样式及文案,忽然发现placeholder-shown伪类选择器,比较官方的解释是

    前端小智@大迁世界

扫码关注云+社区

领取腾讯云代金券