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))