scala 基础

// ::链接字符串 链接字符和list

scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> val b = 0::a
b: List[Int] = List(0, 1, 2, 3)
scala> val c = "x"::"y"::"z" :: Nil
c: List[String] = List(x, y, z)

// :::链接两个list Any公共父类

scala> val d = a ::: c
d: List[Any] = List(1, 2, 3, x, y, z)

//head 返回第一个元素

scala> d.head
res20: Any = 1

scala> a.head
res21: Int = 1

scala> b.head
res22: Int = 0

//tail 除第一个元素以外的其他元素组成的列表-〉伪列表

scala> a.tail
res23: List[Int] = List(2, 3)

scala> b.tail
res24: List[Int] = List(1, 2, 3)

scala> c.tail
res25: List[String] = List(y, z)

//isEmpty

scala> a.isEmpty
res26: Boolean = false

scala> Nil.isEmpty
res27: Boolean = true

scala> def checkEmpty(l : List[Int]):String = {
| if(l.isEmpty) ""
| else l.head.toString}
checkEmpty: (l: List[Int])String

scala> checkEmpty(a)
res28: String = 1

//filter应用

scala> a
res29: List[Int] = List(1, 2, 3)

scala> a.filter(x=>x%2==1)
res30: List[Int] = List(1, 3)

//toList

scala> "acd1r3wqa".toList
res31: List[Char] = List(a, c, d, 1, r, 3, w, q, a)

//isDigit

scala> "acd1r3wqa".toList.filter(x=>Character.isDigit(x))
res33: List[Char] = List(1, 3)

//takeWhile

scala> "acd1r3wqa".toList.takeWhile(x=>Character.isDigit(x))
res34: List[Char] = List()

scala> "acd1r3wqa".toList.takeWhile(x=>x != ‘3‘)
res38: List[Char] = List(a, c, d, 1, r)

//toUpperCase _通配匿名函数

scala> c
res41: List[String] = List(x, y, z)

scala> c.map(x=>x.toUpperCase)
res42: List[String] = List(X, Y, Z)

scala> c.map(_.toUpperCase)
res43: List[String] = List(X, Y, Z)

//list-map/flatMap可以将两层list转为一层/_多层通配

scala> a
res44: List[Int] = List(1, 2, 3)

scala> a.filter(_%2==1).map(_+10)
res45: List[Int] = List(11, 13)

scala> val e =List(a,List(4,5,6))
e: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6))

scala> e.map(x=>x.filter(_%2==0))
res48: List[List[Int]] = List(List(2), List(4, 6))

scala> e.map(_.filter(_%2==0))
res49: List[List[Int]] = List(List(2), List(4, 6))

scala> e.flatMap(_.filter(_%2==0))
res51: List[Int] = List(2, 4, 6)

//Scala reduceLeft与flodLeft

scala> a
res52: List[Int] = List(1, 2, 3)

scala> a.reduceLeft(_+_)
res53: Int = 6

scala> a.reduceLeft((x,y)=>x+y)
res54: Int = 6

//flodLeft 类型与最左边参数类型一致

scala> a.foldLeft(0)(_+_)
res55: Int = 6

scala> a.foldLeft(1)(_+_)
res56: Int = 7

scala> a.foldLeft(4)(_+_)
res57: Int = 10

scala> a.foldLeft(4.0)(_+_)
res58: Double = 10.0

// Scala Rang与Stream
//Scala Rang

scala> 1 to 10
res59: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> 1 to 10 by 2
res60: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)

scala> (1 to 10).toList
res61: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> 1 until 10
res62: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

//Stream

scala> 1#::2#::3#::Stream.empty
res63: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> val stream=(1 to 10000000).toStream
stream: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> stream.head
res64: Int = 1

scala> stream.tail
res65: scala.collection.immutable.Stream[Int] = Stream(2, ?)

//Scala tuple与map
//tuple

scala> (1,2)
res66: (Int, Int) = (1,2)

scala> 1->2
res67: (Int, Int) = (1,2)

scala> (1,"xiaoming","english",99.9)
res69: (Int, String, String, Double) = (1,xiaoming,english,99.9)

scala> val t=(1,"xiaoming","english",99.9)
t: (Int, String, String, Double) = (1,xiaoming,english,99.9)

scala> t._1
res71: Int = 1

scala> t._2
res72: String = xiaoming

=====================================================

scala> def sumSq(in:List[Int]):(Int,Int,Int)=in.foldLeft((0,0,0))((t,v)=>(t._1+1,t._2+v,t._3+v*v))
sumSq: (in: List[Int])(Int, Int, Int)

scala> a
res84: List[Int] = List(1, 2, 3)

scala> sumSq(a)
res85: (Int, Int, Int) = (3,6,14)

scala> sumSq(_)
res86: List[Int] => (Int, Int, Int) = <function1>

//map

scala> val f = Map(1->"xiaoming",2->"alisa")
f: scala.collection.immutable.Map[Int,String] = Map(1 -> xiaoming, 2 -> alisa)

scala> f(1)
res88: String = xiaoming

scala> f(2)
res89: String = alisa

scala> f.contains(1)
res90: Boolean = true

scala> f.contains(3)
res91: Boolean = false

scala> f.keys
res92: Iterable[Int] = Set(1, 2)

scala> f.values
res93: Iterable[String] = MapLike(xiaoming, alisa)

scala> f+(5->"eric")
res94: scala.collection.immutable.Map[Int,String] = Map(1 -> xiaoming, 2 -> alisa, 5 -> eric)

scala> f - 1
res95: scala.collection.immutable.Map[Int,String] = Map(2 -> alisa)

scala> f ++ List(3->"nan",4->"frank")
res96: scala.collection.immutable.Map[Int,String] = Map(1 -> xiaoming, 2 -> alisa, 3 -> nan, 4 -> frank)

scala> f
res97: scala.collection.immutable.Map[Int,String] = Map(1 -> xiaoming, 2 -> alisa)

scala> f--List(1,2,3)
res98: scala.collection.immutable.Map[Int,String] = Map()

scala> f ++ List(3->"nan",4->"frank")--List(1,4)
res99: scala.collection.immutable.Map[Int,String] = Map(2 -> alisa, 3 -> nan)

//快速排序

scala> def qSort(a:List[Int]):List[Int]= if (a.length<2)a else qSort(a.filter(_<a.head))++ a.filter(_==a.head)++ qSort(a.filter(_>a.head))
qSort: (a: List[Int])List[Int]

scala> qSort(List(1,4,35,76,43,21,53,6))
res81: List[Int] = List(1, 4, 6, 21, 35, 43, 53, 76)
时间: 2024-08-03 17:02:10

scala 基础的相关文章

Scala基础

REPL 在Scala中的书籍中会提及REPL,REPL(Read-Eval-Print Loop):这被称为"读取-求值-打印"循环. 不带参数的Scala方法通常不使用圆括号,例如,StringOps类的API显示它有一个distinct方法,不带(),其作用是获取字符串中不重复的字符.调用如下: print("hello".distinct); Scaladoc 阅读Scaladoc的一些小窍门: 如果想使用数值类型,记得看看RichInt.RichDoubl

Scala学习(一)--Scala基础学习

Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学到作为初学者如何浏览Scaladoc文档 1. 使用Scala解释器 2. 用var和val定义变量 3. 数值类型 4. 使用操作符和函数 5. 浏览Scaladoc Scala解释器 启动Scala解释器的步骤如下: 安装Scala 确保scala/bin目录位于系统PATH中 在你的操作系统中

Spark入门到精通视频学习资料--第一章、Scala基础与实践

第一章.Scala基础与实践(3讲) Scala编程语言抓住了很多开发者的眼球.如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格. 根据David Rupp在博客中的说法,Scala可能是下下一代Java. Scala有几项关键特性表明了它的面向对象的本质.例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值.数字等)在内,连函数也是对象.另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mix

scala 基础知识总结

在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF) // scala io Case

Scala 基础(8)—— 占位符_和部分应用函数

1. 占位符 _ 针对 Scala 基础(7)-- 函数字面量和一等函数 中最后提到的,关于 filter 函数字面量的精简写法,可以使用占位符 _ 来代替. 占位符_,用来表示一个或者多个参数.(这里的多个参数不是表示一个下划线代表多个参数,而是多个下划线可以代表多个参数) 在函数字面量的表达中,可以将下划线看成是"要填的空",函数每次被调用时,这个"空"就回被一个参数"填"上. 例如: def main(args: Array[String]

【Scala学习之一】 Scala基础语法

环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark-1.6 Scala是一种混合功能编程语言,类似java,运行于JVM,集成面向对象编程和函数式编程的各种特性.(1)Scala可以与Java互操作:它用scalac这个编译器把源文件编译成Java的class文件,从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的

第一章 Scala基础篇

目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 2.函数 3.方法和函数的区别 4.总结 二.Scala常用数据结构/集合 (一)Scala集合分类和继承体系 1.分类 2.继承体系 (二)数组 (三)元组 (四)List (五)队列 (六)Set (七)Map 一.Scala基础语法 === (一) 变量.类型.操作符 1.变量申明 ●Java

Scala学习(1)——Scala基础知识

本文要解决的问题: Spark主要是由Scala语言编写而成的,所以要真正深入了解Spark,必须要熟悉Scala,在此结合阅读<Scala编程>这本书的情况,对Scala语言做一个基本的总结. Scala的优势 (1)简洁 类型推断 函数创建的文法支持 (2)Java互操作性 可重用Java库 可重用Java工具 没有性能惩罚 Scala工作机制 编译成Java字节码 可在任何标准JVM上运行,甚至是一些不规范的JVM上 Scala编译器是Java编译器的作者写的 启动解释器 输入Scala

Scala基础语法 (一)

如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.接下来我们来理解下,类,对象,方法,实例变量的概念: 对象 - 对象有属性和行为.例如:一只狗的状属性有:颜色,名字,行为有:叫.跑.吃等.对象是一个类的实例. 类 - 类是对象的抽象,而对象是类的具体实例. 方法 - 方法

Scala基础入门-1

首先需要Scala开发环境的搭建,网上自己找教程. 声明常量与变量 val foo = 0 // 常量 var bar = 0 // 变量 在Scala中,更加鼓励使用val来进行声明,也就是推荐使用常量.在大部分时候不需要分号,看自己便好…虽然是强静态类型的语言,但是却并没有写出类型——这就是类型推断. 也可以指定类型: val spark: String = "Hello Scala" 多个的同时声明: val xInt, yInt = 100 // xInt, yInt都声明为1