雲星資料---Scala實戰系列(精品版)】:Scala入門教程047-Scala實戰原始碼-Scala method操作
阿新 • • 發佈:2019-02-10
Scala method操作
package scala_learn.demo11_Collection
/**
* Created by liguohua on 2017/3/1.
*/
object O7_MethodDemo {
def main(args: Array[String]) {
test8
}
def test8(): Unit = {
//1到100之和:列表.foldLeft(初始元素)(操作函式)
val r1 = (1 to 100).foldLeft(0)(_ + _)
println(r1)
//foldLeft的簡寫
val r2 = (0 /: (1 to 100))(_ + _)
println(r2)
//1到100之和:列表.foldRight(初始元素)(操作函式)
val r3 = (1 to 100).foldRight(0)(_ + _)
println(r3)
//foldRight的簡寫
val r4 = ((1 to 100) :\ 0)(_ + _)
println(r4)
}
def test7: Unit = {
val ls1 = List(List(2, 4, 3), List(2, 4, 3, 9))
//將多個集合合併成一個集合,產生List(2 , 4, 3, 2, 4, 3, 9)
//val rs1=ls1.flatMap((l:List[Int])=>{l.map((x:Int)=>{x*2})})
//簡化map中的匿名函式
//val rs1=ls1.flatMap((l:List[Int])=>{l.map(x=>x*2)})
// val rs1=ls1.flatMap((l:List[Int])=>{l.map(_*2)})
//簡化flatMap()中的匿名函式
//val rs1=ls1.flatMap(l=>l.map(_*2))
//第一個_表示ls1 中的每一個List。第二個_表示s1中的每一個List中的每一個元素
val rs1 = ls1.flatMap(_.map(_ * 2))
println(rs1)
}
def test6: Unit = {
val ls1 = List(List(2, 4, 3), List(2, 4, 3, 9))
//將多個集合合併成一個集合,產生List(2, 4, 3, 2, 4, 3, 9)
val rs1 = ls1.flatten
println(rs1)
val ls2 = List(List(2, 4), List(List(2, 4), List(3, 9)))
//將多個集合合併成一個集合,產生List(2, 4, List(2, 4), List(3, 9))
val rs2 = ls2.flatten
println(rs2)
}
def test5: Unit = {
val ls = List(2, 4, 3, 9, 45, 109)
//將一個集合分割成多個集合,產生(List(2, 4),List(3, 9, 45, 109))
val rs = ls.partition(_ % 2 == 0)
println(rs)
println(rs._1 + "\t" + rs._2)
}
def test4: Unit = {
val ls1 = List(2, 4, 3, 9)
val ls2 = List("zhang", "li", "wang")
//以ls1為基準進行組合,產生List((2,zhang), (4,li), (3,wang))
val rs1 = ls1.zip(ls2)
println(rs1)
//以ls2為基準進行組合,產生List((zhang,2), (li,4), (wang,3))
val rs2 = ls2.zip(ls1)
println(rs2)
}
def test3: Unit = {
val ls = List(2, 4, 3, 45, 109)
//filter是為了過濾符合條件的元素,
//val rs = ls.filter((x:Int)=>{x%2!=0})
//函式體只有一句,{}可以省略
//val rs = ls.filter((x: Int) => x % 2 != 0)
//引數只有一個,型別可以省略
//val rs = ls.filter((x) => x % 2 != 0)
//引數只有一個,()可以省略
//val rs = ls.filter(x => x % 2 != 0)
//引數只有一個,使用萬用字元
val rs = ls.filter(_ % 2 != 0)
//List中的元素是不可變的
println(ls)
//將產生一個新的List
println(rs)
}
def test2: Unit = {
val ls = List(2, 4, 3, 45, 109)
//map類似於foreach,不同的在於它有返回值,
//val rs = ls.map((x:Int)=>x * 2)
//var rs = ls.map(x => x * 2)
val rs = ls.map(_ * 2)
//List中的元素是不可變的
println(ls)
//將產生一個新的List
println(rs)
}
def test1: Unit = {
val ls = List(2, 4, 3, 45, 109)
//var rs=ls.foreach((x:Int)=>x*2)
//var rs = ls.foreach(x => x * 2)
var rs = ls.foreach(_ * 2)
//List中的元素是不可變的
println(ls)
//foreach不會引數返回值
println(rs)
}
}