Scala函数高级操作
字符串高级操作:***** 非常重要
将函数赋值给变量/值
def sayHello(name:String): Unit = {
println(s"Hello:$name")
}
object StringApp extends App {
val s = "Hello:PK"
val name = "PK"
//println(s + name)
println(s"Hello:$name")
val team = "AC Milan"
//插值
println(s"Hello:$name, welcome to $team")
多个字符串的写法:
val b =
"""
|这是一个多行字符串
|hello
|world
|PK
""".stripMargin
println(b)
}
匿名函数
(参数名:参数类型) => 函数体
没有大括号,()是必须的
有大括号, ()是可以去掉的
scala> (x:Int) => x+1
res0: Int => Int = <function1>
scala> {(x:Int) => x+1}
res1: Int => Int = <function1>
scala> val m1 = (x:Int) => x+1
m1: Int => Int = <function1>
scala> m1(10)
res2: Int = 11
scala> def add(x:Int, y:Int)=>{x+y}
add: (Int, Int) => Int
scala> add(2,3)
res3: Int = 5
scala> map(x=>(x,1))
currying函数:颗粒化的方式
object FunctionApp extends App {
//将原来接收两个参数的一个函数,转换成2个,这就是颗粒化。
def sum(a:Int, b:Int) = a+b
println(sum(2,3))
颗粒化的方式:
def sum2(a:Int)(b:Int) = a + b
println(sum2(2)(3))
}
高阶函数 *****
主要有map、filter、flatmap、foreach、reduce等
map: 是对每个元素进行某个操作
flatMap: 先压扁到一起,再做map操作
foreach:遍历每一个元素
object FunctionApp extends App {
val l = List(1,2,3,4,5,6,7,8)
//map:逐个去操作集合中的每个元素
l.map((x:Int) => x+1) //给l的LIST里的每个元素+1
l.map((x) => x * 2) //能自己推导类型
l.map(x => x * 2) //去掉括号的前提是括号里面是一个元素就可以省略
l.map( _ * 2).foreach(println) //表示每个元素都乘以2,foreach:遍历每一个元素,不使用foreach的话在IDEA里是不能打印的。
l.map(_*2).filter(_ > 8).foreach(println) //取出大于8的
l.take(4) //取出集合的前4个元素
//1+2=3 3+3=6 6+4=10 10+5=15
l.reduce(_+_) //集合的元素两两相加
l.reduceLeft(_-_) //-34
l.reduceRight(_-_) //-4
l.fold(0)(_-_)
l.foldLeft
l.foldRight
l.max
l.min
l.sum
scala> val f = List(List(1,2),List(3,4),List(5,6))
f: List[List[Int]] = List(List(1,2), List(3,4), List(5,6))
scala> f.flatten //把所有数据压扁到一起
res20: List[Int] = List(1, 2, 3, 4, 5, 6)
// flatMap
scala> f.map(x=>x)
res22: List[List[Int]] = List(List(1,2), List(3,4), List(5,6))
scala> f.map(_.map(_*2))
res23: List[List[Int]] = List(List(2,4), List(6,8), List(10,12))
scala> f.flatMap(_.map(_*2)) //先把数据打扁在一起,然后在调用map。
res24: List[Int] = List(2, 4, 6, 8, 10, 12)
cat hello.txt
hello,world,hell,hello
val txt = scala.io.Source.fromFile("/Users/rocky/imooc/hello.txt").mkString //从文件里读取数据并把数据转换成字符串
println(txt)
val txts = List(txt)
txts.flatMap(_.split(",").map(x => (x,1))).forreach(println) //把数据按逗号进行分割以后再打扁
}
偏函数:PartialFunction[A,B]
A: 输入参数类型
B:输出参数类型
常用作输入模式匹配
/**
* 偏函数:被包在花括号内没有match的一组case语句
*/
object PartitalFunctionApp extends App {
//match的写法
val names = Array("Akiho Yoshizawa", "YuiHatano", "Aoi Sola")
val name = names(Random.nextInt(names.length)) //随机取一个名字
name match {
case "Akiho Yoshizawa" => println("吉老师...")
case "YuiHatano" => println("波老师...")
case _ => println("真不知道你们在说什么...")
}
//偏函数的写法:
def sayChinese:PartitalFunction[String,String] = { //穿进去一个入参,输出一个出参。
case "Akiho Yoshizawa" => "吉老师..."
case "YuiHatano" => "波老师...")
case _ => "真不知道你们在说什么..."
}
println(sayChinese("Akiho Yoshizawa"))
}
Scala函数高级操作的更多相关文章
- Scala学习——函数高级操作
scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...
- Scala函数高级篇
一.匿名函数 没有名字的函数就是匿名函数,格式:(x:Int)=>{函数体} x:表示输入参数类型:Int:表示输入参数类型:函数体:表示具体代码逻辑 传递匿名函数至简原则: 参数的类型可以省略 ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- cassandra高级操作之索引、排序以及分页
本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...
- MySQL学习笔记_9_MySQL高级操作(上)
MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1; #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...
- python列表(list)的使用技巧及高级操作
python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...
- scala 基本类型和操作
Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是 ...
- SpringMVC整合Mongodb开发,高级操作
开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 + ...
- Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...
随机推荐
- Java反编译工具Luyten-0.5.3
Luyten是一款很强大的反编译工具包,是一款github的开源工具,软件功能非常强大,界面简洁明晰.操作方便快捷,设计得很人性化. 工具软件下载路径:https://github.com/death ...
- php内置函数分析之strtoupper()、strtolower()
strtoupper(): PHP_FUNCTION(strtoupper) { zend_string *str; ZEND_PARSE_PARAMETERS_START(, ) Z_PARAM_S ...
- Flutter-網絡請求
Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比 ...
- AIX系统软件安装问题
一.安装软件时一定要cd到介质目录中 二.选择accept new licence 三.更新系统时避免使用updata_all,要手动选择出要更新的软件 四.oracle11G的rac还要用到open ...
- 按照MySQL
转载自:https://mp.weixin.qq.com/s?__biz=MzIwNzk0NjE1MQ==&mid=2247484200&idx=1&sn=6eed12242c ...
- Android签名机制之---签名验证过程详解
一.前言 今天是元旦,也是Single Dog的嚎叫之日,只能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是如何验证一个Apk的签名.在前一篇文章中我们 ...
- 大数据分析:hadoop工具
一.hadoop工具 Hadoop介绍: Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储 ...
- linux用setup命令来更改ip配置
在有安装系统桌面情况下,可以使用图形化形式来配置ip地址, 在命令行下,输入“setup”调出网卡.防火墙等配置界面: 2 选择“network configuration“,回车: 选择“devic ...
- 前端面试之路之HTML面试真题
1.doctype的意义是什么 让浏览器以标准模式渲染 让浏览器知道元素的合法性 2.HTML XHTML HTML5的关系 HTML属于SGML XHTML属于XML,是HTML进行XML严格化的结 ...
- list_car()函数小记
一 ,list_car ,前端传过来参数字典,从字典中获取参数 二, 根据参数去数据库中查找,条件查找 三,将查找出来的对象,flask_sqlalchemy.BaseQuery,然后通过这个对象的 ...