2.0 查找
利用迭代器查找,如果找到返回该元素的Option,如果没有返回None
@Test
def test11(): Unit = {
val ints: Array[Int] = Array(1, 27, 301)
val maybeInt: Option[Int] = ints.find(item => item % 2 == 0)
if (maybeInt.nonEmpty) {
println("有值")
println(maybeInt)
} else {
println("无值")
}
}
2.1 过滤
返回ture的时候过滤掉,并返回一个新的集合
object Test01_Demo {
def main(args: Array[String]): Unit = {
var list = List(1,99,3,8,2,6)
// 1 过滤
val value: List[Int] = list.filter(item => item % 2 == 0)
println(value)
}
}
2.2 映射
集合中的每一个元素 转成 所想要的元素 并返回一个新的集合
object Test01_Demo {
def main(args: Array[String]): Unit = {
var list = List(1,99,3,8,2,6)
// 2 映射
val value1 = list.map(item => item * item)
println(value1)
}
}
2.3 扁平化
二维集合 转成 一维集合
object Test01_Demo {
def main(args: Array[String]): Unit = {
// 3 扁平化
val list2 = List(List(1,2),List(3,4),List(5,6))
val flatten = list2.flatten
println(flatten)
}
}
2.4 映射 扁平化
将Map集合映射成二维集合,再将二维集合 转成 一维集合
object Test01_Demo {
def main(args: Array[String]): Unit = {
// 4 映射+扁平化
val list3 = List("a xixi","b haha","c xixi" )
val value2: List[Array[String]] = list3.map(item => item.split(" "))
val flatten1: List[String] = value2.flatten
println(flatten1)
val value3: List[String] = list3.flatMap(item => item.split(" "))
println(value3)
}
}
2.5 分组
list.groupBy(item => item % 2 == 0) 返回值作为 组名,符合条件进入该组(相同组名)
object Test01_Demo {
def main(args: Array[String]): Unit = {
var list = List(1,99,3,8,2,6)
// 5 分组
val value4: Map[Boolean, List[Int]] = list.groupBy(item => item % 2 == 0) // 奇偶分组
println(value4)
for(key:Boolean <- value4.keys){
println(s"$key ==> ${value4(key)}")
}
}
}
object Test01_Demo {
def main(args: Array[String]): Unit = {
// 5 分组
val value4: Map[Boolean, List[Int]] = list.groupBy(item => item % 2 == 0) // 奇偶分组
/*println(value4)
for(key:Boolean <- value4.keys){
println(s"$key ==> ${value4(key)}")
}*/
val list4 = List("xixi","haha","hadoop","hbase","hive","spark","flink")
val value5: Map[Char, List[String]] = list4.groupBy(item => item.charAt(0))
println(value5)
for (key:Char <- value5.keys){
println(s"$key ===> ${value5(key)}")
}
}
}
2.6 Reduce
(A1,A1)=> A1
2.6.1 从左往右
val res = list.reduce((a,b)=> a+b)
val res = list.reduceLeft((a,b)=> a+b)
2.6.2 从右往左
val res = list.reduceRight((a,b)=> a-b) // 1 - ( 3 - ( 54 - 77 ) )
2.7 fold(折叠)
有初始值的Reduce
2.7.1 从左往右
list.foldLeft(initValue)((a,b)=> a+b)
2.7.2 从右往左
val list = List(1,3,54,77)
val res = list.foldRight(10)((a, b) => a - b) // 1 - ( 3 - (54 - ( 77 - 10 ) ))
println(res) // -15
Reduce和Fold的异同
- 都是规约聚合
- Fold可以指定一个初值进行聚合,而Reduce是集合中的第一个或者最后一个当做初值