文档章节

scala-常用函数介绍

jacksu
 jacksu
发布于 2015/11/25 11:49
字数 947
阅读 148
收藏 2

欢迎大家关注: scala工具库 ,里面包含各种库的测试用例和使用说明文档

##模式匹配 使用用模式匹配实现斐波那契

def fibonacci(in: Any): Int = in match {
    case 0 => 0
    case 1 => 1
    case n: Int if(n > 1)=> fibonacci(n - 1) + fibonacci(n - 2)
    case _ => 0
}

println(fibonacci(3))

##元组tuple 元组可以保存不同类型的值,不能通过名称获取字段,而是使用位置下标来读取对象;而且这个下标基于1,而不是基于0。

val hostPort = ("localhost", 80)
println("host:%s,port:%s".format(hostPort._1,hostPort._2))

执行结果:

host:localhost,port:80

##选项 Option Option 是一个表示有可能包含值的容器。 Option基本的接口是这样的:

trait Option[T] {
  def isDefined: Boolean
  def get: T
  def getOrElse(t: T): T
}

##映射 Map Option本身是泛型的,并且有两个子类: Some[T] 或 None Map.get 使用 Option 作为其返回值,表示这个方法也许不会返回你请求的值。

val map = Map(1 -> "one", 2 -> "two")
println(map.get(2))
println(map.get(3))

执行结果:

Some(two)
None

##函数组合子(Functional Combinators) ###map map对列表中的每个元素应用一个函数,返回应用后的元素所组成的列表。

    val numbers = List(1, 2, 3)
    val double = numbers.map((i: Int) => i * 2)
    val squared = numbers.map((i: Int) => BigInt(i).pow(3))
    println("%s".format(numbers))
    println(double)
    println(squared)
    //传入一个部分应用函数
    def timesTwo(i: Int): Int = i * 2
    val doubleFunction = numbers.map(timesTwo _)
    println(doubleFunction)

执行结果:

List(1, 2, 3)
List(2, 4, 6)
List(1, 8, 27)
List(2, 4, 6)

###foreach foreach很像map,但没有返回值。foreach仅用于有副作用[side-effects]的函数

    //foreach返回值为Unit即void
    val foreachResult = numbers.foreach { (i: Int) => i * 2 }
    println(foreachResult)

执行结果:

()

###filter filter移除任何对传入函数计算结果为false的元素

    val filterResult = numbers.filter { (i: Int) => i % 2 == 0 }
    println(filterResult)

执行结果:

List(2)

###zip zip将两个列表的内容聚合到一个对偶列表中,多余的元素删除

    val zipResult = numbers.zip(List('a', 'b', 'c', 'd'))
    println(zipResult)

执行结果:

List((1,a), (2,b), (3,c))

###partition partition将使用给定的谓词函数分割列表。

    val partitionResult = numbers.partition { _ % 2 == 0 }
    println("partition result:%s".format(partitionResult))

执行结果:

partition result:(List(2),List(1, 3))

###find find返回集合中第一个匹配谓词函数的元素

    var findResult = numbers.find(_ == 1)
    println("find result:%s".format(findResult))
    findResult = numbers.find(_ > 3)
    println("find result:%s".format(findResult))

执行结果:

find result:Some(1)
find result:None

###drop&dropWhile drop删除前i个元素,dropWhile删除直到不满足谓词函数的元素

    var dropResult = numbers.drop(2)
    println("drop result:%s".format(dropResult))
    dropResult = numbers.dropWhile(_ % 2 != 0)
    println("dropWhile result:%s".format(dropResult))

执行结果:

drop result:List(3)
dropWhile result:List(2, 3)

###foldLeft&foldRight 0为初始值(记住numbers是List[Int]类型),m作为一个累加器,foldRight与foldLeft运行过程相反

    var foldLeftResult = numbers.foldLeft(0) {
      (m: Int, n: Int) => println("m:" + m + " n:" + n); m + n
    }
    println("foldLeft result:%s".format(foldLeftResult))
    var foldRightResult = numbers.foldRight(0) {
      (m: Int, n: Int) => println("m:" + m + " n:" + n); m + n
    }
    println("foldRight result:%s".format(foldRightResult))

执行结果:

m:0 n:1
m:1 n:2
m:3 n:3
foldLeft result:6
m:3 n:0
m:2 n:3
m:1 n:5
foldRight result:6

###flatten flatten将嵌套结构扁平化为一个层次的集合

    var flattenResult = List(List(1, 2, 3), List(4, 5, 6)).flatten
    println("flatten result:%s".format(flattenResult))

执行结果:

flatten result:List(1, 2, 3, 4, 5, 6)

###flatMap flatMap是一种常用的组合子,结合映射[mapping]和扁平化[flattening]。 flatMap需要一个处理嵌套列表的函数,然后将结果串连起来。flatMap是map和flatten的组合。

    val nestedNumbers = List(List(1, 2), List(3, 4))
    var flatMapResult = nestedNumbers.flatMap(x => x.map(_ * 2))
    println("flatMap result:%s".format(flatMapResult))
    flatMapResult = nestedNumbers.map(x => x.map(_ * 2)).flatten
    println("flatMap result:%s".format(flatMapResult))

执行结果:

flatMap result:List(2, 4, 6, 8)
flatMap result:List(2, 4, 6, 8)

##广告 点击Spark加入群Spark,分享更多Spark相关信息

© 著作权归作者所有

jacksu
粉丝 9
博文 11
码字总数 6364
作品 1
西安
高级程序员
私信 提问
Scala编程语言视频教程|Scala视频教程

Scala编程语言视频教程 分享网盘下载——https://pan.baidu.com/s/1kUFL6Ub 密码: m7k4 Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于...

nitycka
2017/11/01
0
0
Java/Scala互操作实践 1:基础操作

本文将以Spring Boot为例,介绍下实际工作中的Java/Scala互操作。在提高个人效率、满足自我追求的情况下更多的照顾到团队不同人的实际。同时也是想说明,在同一个工程里混用Java和Scala语言是...

羊八井
2016/10/10
2.3K
10
5 本最棒的 Scala 免费电子图书

Scala是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。 本文介绍 5 本免费的 Scala 电子图书: 1. Programming...

oschina
2013/05/01
12K
19
熟练的掌握Scala语言系列课程

课程名字:熟练的掌握Scala语言系列课程 课程网盘下载: http://pan.baidu.com/s/1pJuRAsV 密码: ahr3 课程内容: 共10章,58课时,总时长944分钟 想要深入研究spark,掌握好scala至关重要,目...

混坛魔王
2015/01/09
843
4
Spark(七) -- Scala快速入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/45830709 Scala作为Spark的开发语言,想要成为Spark高手,精通Scala是必须要走...

jchubby
2015/05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 HTML5教程 HTML5表单 新增的表单属性1

HTML5 Input表单为<form>和<input>标签添加了几个新属性,属性如表1。 1 autocomplete属性 autocomplete属性规定form或input域应该拥有自动完成功能,当用户在自动完成域中开始输入时,浏览器...

老码农的一亩三分地
48分钟前
5
0
OSChina 周五乱弹 —— 葛优理论+1

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享米津玄師的单曲《LOSER》: mv中的舞蹈诡异却又美丽,如此随性怕是难再跳出第二次…… 《LOSER》-...

小小编辑
今天
1K
16
nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
15
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部