文章目录
1、List集合
List集合
scala> val l=List(1,2,3,4,5,6,7,8)
l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
scala> l.max
res42: Int = 8
scala> l.min
res43: Int = 1
scala> l.sum
res44: Int = 36
scala> l.count(_>3) //统计大于3的个数
res45: Int = 5
2、map映射
map 映射:y=f(x), x作用上一个函数f,得到y
scala> val l=List(1,2,3,4,5,6,7,8)
l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
scala> l.map((x:Int)=>x*2)
res29: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16)
变形
scala> l.map(x=>x*2)
res30: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16)
scala> l.map(_*2) // // _ 表示List的每个元素
res31: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16)
3、filter()过滤
scala> l.map(_*2).filter(_>10)
res32: List[Int] = List(12, 14, 16)
4、take(n)取前n个
scala> l.map(_*2).filter(_>10).take(2)
res33: List[Int] = List(12, 14)
5、reduce()求和
源码就是相邻的两个数字相加变成一个数字,然后再跟后面的数字相加
scala> l.reduce(_+_)
res34: Int = 36
同理,两两相减
scala> l.reduce(_-_)
res35: Int = -34
内部解析
object ScalaYi{
def main(args: Array[String]): Unit = {
val l=List(1,2,3,4,5,6,7,8)
l.reduceLeft((x:Int,y:Int)=>{
println(x+","+y) //打印两个数字
x-y //两个数字相减
})
}
}
结果:
1,2
-1,3 //第一个数字是前面两个数字相减的结果
-4,4
-8,5
-13,6
-19,7
-26,8
所以最终结果是:
-26-8=-34
6、fold(10) 附一个初始值,然后两两相加
scala> l.reduce(_+_)
res40: Int = 36
scala> l.fold(10)(_+_)
res41: Int = 46
7、flatten压平,返回list
scala> val a=List(List(1,2),List(3,4),List(5,6))
a: List[List[Int]] = List(List(1, 2), List(3, 4), List(5, 6))
scala> val b=a.flatten
b: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> b.map(_*2)
res47: List[Int] = List(2, 4, 6, 8, 10, 12)
8、flatMap映射再压平
在flatMap中,我们会传入一个函数,该函数对每个输入都会返回一个集合(而不是一个元素),然后,flatMap把生成的多个集合“拍扁”成为一个集合。
//第一个“_”,表示a里的元素,此时的元素是List;后面map作用的是每个List元素的元素,乘以2
scala> a.flatMap(_.map(_*2))
res54: List[Int] = List(2, 4, 6, 8, 10, 12)