第1课 Scala语法提炼

作业1:移除一个数组中第一个负数后的所有负数

import scala.collection.mutable.ArrayBuffer

//定义过滤函数

def myfilter(param1:ArrayBuffer[Int]):ArrayBuffer[Int]={

//定义boolean变量,用于判断是否是第一个负数 

var first = true 

//便利数组

        for(element <- param1){

 //找到负数

 if(element < 0)

   {

     //判断是否是第一个

     if(first == true)

first = false 

     else

//不是第一个则从原数组中去除

param1 -= element

   }

}

param1

}

学习笔记总结:

1:可变变量声明,var int a

                             val 不可变变量声明,val int a

对于变量来说,尽可能使用不可变变量,在声明变量时可以声明类型也可以不声明类型,但是声明类型后,赋值时,只能赋值同类型或子类型的值。

        Java中存在基本类型和封装类型,但是scala中基本类型和引用类型是可以自动转换的,即基本类型也是有方法的,如1.tostring()(一切皆对象),再如,1+1 执行时是1.+(1)。

        Scala中无++、——操作符,但是可以用 +=、-=代替,scala提供了大量的库,如scala.math._库中min()、max()。

        在建立对象时,scala是调用object的apply方法进行的,类似于java中的工厂方法。

        Scala中表达式是有结果或返回值的,这点与java不同,代码块的返回值是,代码块的最后一行的内容的值。

2:  循环结构:while循环

               for循环:  for(i <- 0 to 20 )   println(i)

                                    for(i<- 0 to 20 if i % 2 == 0) println(i)

       函数定义 def   f1:int = { 函数体 }   (最后一行为返回值)

在函数定义时,若是无法推断函数的返回值时,函数必须显示声明返回值。

        默认参数:def f1(param1:int, param2:String = “spark”) = param1 + param2

        变长参数:def f1(param:int*) = {},主要是在int后面加上*号

        range转换为函数参数:1 to 100 : _*  把range中的所有元素提取出来。

        过程即是没有返回值的函数。

        Lazy变量:只有在第一次调用时才执行的变量,一般用于耗时的操作中,如文件的读取。

        异常处理:try{

}catch{

}finally{

}

catch代码块中用于捕获异常,finally始终执行,用于一些类似于关闭文件的操作。

3:scala中的Array、Map、Tuple

Array可以先声明后赋值,亦可以直接赋值。例如

        Val array = Array[Int](5)

               array(1) = 2

        val array = Array (1, 2, 3, 4)

可变数组ArrayBuffer,可以加入任意数量的元素,不会出现数组越界。

        加入操作: arrayBuffer+= (2,3,4)

        删除操作:.trimStart(n)    //从数组的头开始删除n个元素

.trimEnd(n)    //从数组的尾开始删除n个元素

.remove(d)     //从数组中删除第d位的元素

并返回删除元素的值

                               .remove(d,n) //删除数组中从d位算起的其后n个数

              插入操作:.insert(d,x)//在d位插入元素,其中可以插入一个或多个元素

              转换操作: arraybuffer.toArray    //将可变数组转换为长度不可变数组

                                          Array.toBuffer      //将不可变数组转换为长度可变数组

       数组遍历:for(i<- 0 until (arr.length, 2))   println(arr(i))

                            for(i <- (0 untilarr.length) .reverse)   println(arr(i))//从尾部开始遍历

数组转换为字符串:arr.mkString(“,”)

  排序:         scala.util.Sortint.quickSort(arr)

  遍历时可以使用yield,其将收集yield后的表达式的值并组成一个Array

for (i <- arr if i % 3 == 0) yield i*i

过滤: arr.filter(_ % 3 == 0).map( i => i*i )

 

Map存储的是键值对

val person =  map(“spark” -> 6, “hadoop” -> 11)   //赋值

person += (“flink”-> 5)                 //添加

person -= (“flink” -> 5)                   //删除

person.contains(“spark”)                 //包含

person.getorElse(“spark”,100)   <=>

if(person.contains(“spark”)person(“spark”)else 100)

for((key,value) <- person)  println(key + ” ”+value)  //遍历

              scala.collection.immutable.SortedMap(“key”->value)//按key值排序

 

tuple元组    val tuple = (“spark”, 6, 9, 6)  //赋值,tuple可以包含任意类型元素

                                   tuple._1                        //取元组中位置为1的元素

时间: 2024-10-27 20:01:34

第1课 Scala语法提炼的相关文章

Scala 语法

下面的代码包含了基本的Scala的语法内容.包括:判断,循环代码片段,方法定义,调用. 虚拟类,继承,接口,case,package,单例模式 [java] view plain copy   package org.exinglo.scala      class LearnScala {      }      object Test{     val variable1 = "this is my first scala variable"            def func

​第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结

本期内容: 1 Scala中的类.object实战详解 2 Scala中的抽象类.接口实战详解 3 综合案例及Spark源码解析 一:定义类 class HiScala{ private var name = "Spark" def sayName(){ println(name) } def getName = name } Scala中,变量与类中的方法是同等级的,可以直接相互赋值.与java不同的是类中的属性必须初始化,例如name属性不初始化,就会报错. scala中的get与

Scala语言简洁的语法

在本系列的第一篇文章 <使用递归的方式去思考>中,作者并没有首先介绍 Scala 的语法,这样做有两 个原因:一是因为过多的陷入语法的细节当中,会分散读者的注意力,反而忽略了对于基本概念,基本思想的 理解:二是因为 Scala 语法非常简洁,拥有其他语言编程经验的程序员很容易读懂 Scala 代码.现在我们将 回过头来,从基本的语法开始学习 Scala 语言.大家会发现 Scala 语言异常精炼,实现同样功能的程序,在 代码量上,使用 Scala 实现通常比 Java 实现少一半或者更多.短小

Scala语言简洁的语法应用示例

它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言.http://www.aliyun.com/zixun/aggregation/16945.html">Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择.作者希望通过这个系列,可以为大家介绍 Scala 语言的特性,和 Scala 语言给我们带来的关于编程思想的新的思考. 在本系列的第一篇文章 <使用递归的方式去思考>中,作者并没有首先

Scala入门到精通——第三十节 Scala脚本编程与结束语

本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,比如中文粘贴会出现乱码.多行代码粘贴时会出错,此时需要用到REPL的高级功能.在日常开发过程中,我们粘贴多行代码的时候会遇到下列问题: //本意是要粘贴下面两行代码 class Person(val name:String,val age:Int) val p=new Person("摇摆少年梦&q

给Java开发者的Scala教程

author:Michel Schinz,Philipp Haller 1. 简介 本文将该要的介绍Scala语言和其编译.这里假设读者已经有一定的java开发经验,需要概要的了解他们可以用Scala 做些什么. 2. 第一个例子 我们用全世界最著名的代码来作为开始.虽然没什么用,但是可以很好地直观的了解Scala: object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") 

《深入理解Scala》——第1章,第1.3节静态类型和表达力

1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转

快学Scala习题解答—第一章 基础

  A Read–Eval–Print Loop (REPL), also known as an interactive toplevel or language shell, is a simple, interactive computer programming environment that takes single user inputs (i.e. single expressions), evaluates them, and returns the result to the

Scala入门到精通——第二十八节 Scala与JAVA互操作

本节主要内容 JAVA中调用Scala类 Scala中调用JAVA类 Scala类型参数与JAVA泛型互操作 Scala与Java间的异常处理互操作 1. JAVA中调用Scala类 Java可以直接操作纵Scala类,如同Scala直接使用Java中的类一样,例如: //在Person.scala文件中定义Scala语法的Person类 package cn.scala.xtwy.scalaToJava class Person(val name:String,val age:Int) //伴