partition函数:

对列表进行分组,参数传入一个布尔表达式,返回true的一组,返回false的一组。

只能分成两组

scala>  val list = List(1,2,3,4)
scala>  list.partition(_ % 2 == 0)
res10: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
scala> val bigData =List("spark","hadoop","hbase")
scala> bigData.partition(_.startsWith("h"))
res11: (List[String], List[String]) = (List(hadoop, hbase),List(spark))


find函数:

找到满足条件的第一个元素

scala> println(list.find { x => x %2==0 })
Some(2)
scala>  println(list.find { _ <=0 })
None


takeWhile函数:

找到满足条件的最长前缀元素,也就是说,一旦有一个元素不满足条件,后续的元素就不用判断了。

scala> List(1,2,3,2,5,3,6).takeWhile(_<3)
res14: List[Int] = List(1, 2)

列表中的第二个2就没有被放到结果,和filter还是有区别的 。


dropWhile函数:

和takeWhile相反,删除满足最大前缀的数据

scala> List(1,2,3,2,5,3,6).dropWhile(_<3)
res15: List[Int] = List(3, 2, 5, 3, 6)

span函数:

将List拆分成两个List。于partition不同,它等同于

(c takeWhile p, c dropWhile p) 但是效率更高

scala> List(1,2,3,2,5,3,6).span(_<3)
res16: (List[Int], List[Int]) = (List(1, 2),List(3, 2, 5, 3, 6))

exists函数:

判断是否存在满足条件的元素

scala> list.exists(_==1)
res17: Boolean = true

forall函数:

判断是否List中的所有元素都满足条件

scala>  println(list.forall { x => x>0})
true

判断是否有全部元素都是0 的List

   def hasTotalZeroList(m : List[List[Int]]) = {
     m.exists { row => row.forall { _ == 0} }
   }
   val ListAll = List(List(1,0,0),List(0,1,0),List(0,0,0))
   println(hasTotalZeroList(ListAll))