【scala 高级函数】快速了解scala高级函数用法
来源:互联网 发布:arp s绑定mac 编辑:程序博客网 时间:2024/05/19 20:47
主要内容:
1、scala 的mkString 使用
2、Scala的List/Set/Tuple使用
3、Scala的Map和Option的使用
4、Scala的集合内常用的操作
5、Scala的泛型:类与方法的使用
6、Scala的implicit:隐式转换、隐式参数、隐式类
1、Scala的mkString使用
如果你想要把集合元素转化为字符串,那麽请使用mkString 函数。同时可能还会添加分隔符,前缀,后缀。
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/20. */object Test20ScalaMkString { // mkString的使用 val a = Array("apple", "banana", "cherry") val b = Array(Array("a", "b"), Array("c", "d")) def main(args: Array[String]) {// 把数组转换为字符串 println(a.mkString)// 使用mkString方法你会看到结果并不漂亮,我们来加一个分隔符: println(a.mkString(",")) println(a.mkString(" "))// 同样你可以添加一个前缀和一个后缀 println(a.mkString("[",",","]"))//如果你想把一个潜逃集合转化为一个字符串,比如嵌套数组,首先你要展开这个嵌套数组,然后调用mkString方法 println(a.flatten.mkString(",")) println(b.flatten.mkString(",")) }}
运行结果:
applebananacherryapple,banana,cherryapple banana cherry[apple,banana,cherry]a,p,p,l,e,b,a,n,a,n,a,c,h,e,r,r,ya,b,c,dProcess finished with exit code 0
2、Scala的List/Set/Tuple使用
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/20. */object Test21ScalaListSetTuple { def main(args: Array[String]) { val a_list=List(1,2,3,4,5,6,7,8,9) println(a_list)// 取list中的元素 println(a_list(1))// Map的用法 val b_list=a_list.map((x:Int)=>2*x) println(b_list) val c_list=a_list.map(2*_) println(c_list)// set 集合的使用(相当于去重) val s = Set(5, 16, 30,5,6,7,8,9,9,20,16) println(s)// 判断元素是否包含 println(s(1)) println(s(5))// Tuple 元组的使用 val hostPost = ("localhost", "8080") println(hostPost) println(hostPost._1) println(hostPost._2) }}
运行结果:
List(1, 2, 3, 4, 5, 6, 7, 8, 9)2List(2, 4, 6, 8, 10, 12, 14, 16, 18)List(2, 4, 6, 8, 10, 12, 14, 16, 18)Set(5, 20, 6, 9, 7, 16, 8, 30)falsetrue(localhost,8080)localhost8080Process finished with exit code 0
3、Scala的Map和Option的使用
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/20. */object Test22ScalaMapOption { def main(args: Array[String]) { val tmp = "a" -> "b" println(tmp) // Map函数使用 val m = Map("a" -> "1", "b" -> "2", "c" -> "3") println(m) // Option的操作 (处理为空的数据) val r1 = m.get("a").getOrElse("None") val r2 = m.get("b").getOrElse("None") val r3 = m.get("f").getOrElse("None")// 引用变量的用法$ println(s"m=$m, r1=$r1, r2=$r2, r3=$r3") }}
运行结果:
(a,b)Map(a -> 1, b -> 2, c -> 3)m=Map(a -> 1, b -> 2, c -> 3), r1=1, r2=2, r3=NoneProcess finished with exit code 0
4、Scala的集合内常用的操作
foreach、 map、 flatten、 flatMap、 filter、 zip、 partition 的使用说明
reduceLeft、 reduceRight、 foldLeft、 foldRight、 sortWith 的使用说明
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/20. */object Test23ScalaCollectionOperations { def main(args: Array[String]) { val l = List(1, 2, 3, 4) // foreach 使用(类似于map,但是没返回值) l.foreach(print(_)) println() val for1 = l.foreach(x => print(3 * x + "\t")) println(s"for1=$for1") // map 迭代 println("\n" + "_" * 30) l.map(3 * _) println() l.map(print(_)) println() val m1 = l.map(x => print(3 * x + "\t")) // 因为是打印输出,所以元素为空 println(s"m1=$m1") // flatten (扁平化:多个List 压缩到一个List中 ) println("\n" + "_" * 30) val fn1 = List(List(1, 2, 3), List(4, 5)) val fn2 = List(List(1, 2, 3), List(4, 5)).flatten println(s"fn1=$fn1, fn2=$fn2") // flatMap(map + flatten) // flatMap: map是对大List的元素进行操作 // _.map: 是对大list里面的小List的元素进行操作 // flatMap: flatten对最终大List的元素进行平扁化操作 println("\n" + "_" * 30) val fm = List(List(1, 2, 3), List(4, 5)) val fm1 = fm.flatMap( _.map(3 * _)) val fm2 = fm.flatMap(x => x.map(3 * _)) println(s"fm1=$fm1, fm2=$fm2") // filter 过滤 println("\n" + "_" * 30) val ft1 = l.filter(_ % 2 ==0) val ft2 = l.filter(x => x % 2 ==0) println(s"ft1=$ft1, ft2=$ft2") // zip (聚合 => 生成一个装有元组的列表 ) 方法的使用 println("\n" + "_" * 30) val a = List(1, 2, 3, 4) val b = List(11, 12, 13, 14) val z1 = a.zip(b) val z2 = a zip b println(s"z1=$z1, z2=$z2") // partition 列表分割 println("\n" + "_" * 30) val p1 = l.partition(_ % 2 == 0) println(s"p1=$p1") // reduceLeft/reduceRight 和 foldLeft/foleRight 的使用 与 区别 println("\n" + "_" * 30) val lis = List(1,7,2,9) // 实际是: ((1 - 7) - 2) - 9 = 1 - 7 - 2 - 9 = -17 val fc1 = lis.reduceLeft(_-_) // 实际是: 1 - (7 - (2 - 9)) = 1 - (7 + 7) = -13 val fc2 = lis.reduceRight(_-_) // foldLeft(初始值)(函数) // 实际是: 0 - 1 - 7 - 2 - 9 = -19 val fc3 = lis.foldLeft(0)(_-_) // 实际是: 1 - (7 - (2 - (9 - 0))) = 1 - 7+2 - 9 = -13 val fc4 = lis.foldRight(0)(_-_) println(s"fc1=$fc1, fc2=$fc2, fc3=$fc3, fc4=$fc4") // sortWith println("\n" + "_" * 30) val tmp_l = List(1, -3, 4, 2, 6) println("小到大排序: "+ tmp_l.sortWith(_ < _)) println("大到小排序: " + tmp_l.sortWith(_ > _)) }}
12343 6 9 12 for1=()______________________________12343 6 9 12 m1=List((), (), (), ())______________________________fn1=List(List(1, 2, 3), List(4, 5)), fn2=List(1, 2, 3, 4, 5)______________________________fm1=List(3, 6, 9, 12, 15), fm2=List(3, 6, 9, 12, 15)______________________________ft1=List(2, 4), ft2=List(2, 4)______________________________z1=List((1,11), (2,12), (3,13), (4,14)), z2=List((1,11), (2,12), (3,13), (4,14))______________________________p1=(List(2, 4),List(1, 3))______________________________fc1=-17, fc2=-13, fc3=-19, fc4=-13______________________________小到大排序: List(-3, 1, 2, 4, 6)大到小排序: List(6, 4, 2, 1, -3)Process finished with exit code 0
5、Scala的泛型:类与方法的使用
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/21. */// 泛型类class Test24ScalaGenericity[T, S](val first: T, val second: S) { // 泛型方法 def compute[W](list: List[W]) = list.foreach(x => print(x + "\t"))}object Test24ScalaGenericity{ def main(args: Array[String]) { val t = new Test24ScalaGenericity[Int, String](1, "laidefa") println(t.first + " : " + t.second) t.compute[Int](List(1, 2, 3)) }}
1 : laidefa1 2 3 Process finished with exit code 0
6、Scala的implicit:隐式转换、隐式参数、隐式类
package DataStructureAndAlgorithm/** * Created by Administrator on 2017/12/21. *//** 如何 为类添加默认的自定义方法 ???* 背景: 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一个人添加是不可能滴* 所以:通过隐式转换,添加自定义方法* 1. 例如 对A这个类添加一个rich方法* 2. 我们新建一个 RichA这个类,传入变量 A这个类* 3. 在RichA这个类中添加一个rich方法* 4. 隐式转换:自定义 a2RichA 方法,new RichA这个类,传入参数 A 这个类* 5. new A 这个类,发现新的对象a, 有rich 方法叻* */class A{}class RichA(a: A){ def rich{ println("rich ... ") }}object Test25ScalaImplicit { def testParam(implicit name: String) { println(name) } // 自定义的隐式类 implicit class Calculator(x: Int) { def add_10(a: Int): Int = (x + a) * 10 } def main(args: Array[String]) { // 1.隐式转换 implicit def a2RichA(a: A) = new RichA(a) // 新建变量 val a = new A a.rich // 2.隐式参数 // 设置隐式变量的值 implicit val name = "implicit!!!" // 设置隐式变量的值 testParam // // 如果不传入参数:报错 // testParam() // 自定义参数 testParam("xxx") // 3.隐式类: // 为Int类型,添加一个自定义的 add方法 // 调用隐式类 println(4.add_10(10)) }}
rich ... implicit!!!xxx140Process finished with exit code 0
阅读全文
0 0
- 【scala 高级函数】快速了解scala高级函数用法
- Scala练习之高级函数
- scala简要:高级函数和高级类型
- SCALA 函数用法浅析
- 第22节:Scala集合和高级函数操作
- scala系列知识点总结(函数高级篇)
- scala高级类型
- scala 高级类型
- scala高级编程
- scala 高级类型
- scala高级类型
- Scala list高级使用
- scala => 用法 匿名函数
- scala--快速了解Breeze
- Scala 函数
- Scala 函数
- scala函数
- Scala函数
- bash基本特性
- EShop .cC
- 用Navicat保存数据字典
- 每周一报 12.20
- JAVA日期操作大全
- 【scala 高级函数】快速了解scala高级函数用法
- springboot
- angular4中父组件如何调用子组件的方法
- HX711运算代码
- Strut2 OGNL知识点
- 一个简单的python爬虫爬取糗百图片
- 20171220Capstone培训班
- 在Linux里面配置jdk1.8
- eclipse中将项目打包成jar的两种方法,及其问题与解决方法