Scala中拆分操作partition、grouped、groupBy和sliding函数

拆分操作是把一个容器里的元素按一定的规则分割成多个子容器。

常用的拆分方法有partition、groupBy、grouped和sliding。

partition

partition方法接受一个布尔函数,用该函数对容器元素进行遍历,以二元组的形式返回满足条件和不满足条件的两个 C[T]类型的集合。

    val list=1 to 10

    // partition拆分为二元组
    println(list.partition(_<5))

输出结果

(Vector(1, 2, 3, 4),Vector(5, 6, 7, 8, 9, 10))

groupBy

groupBy方法接受一个返回U类型的函数,用该函数对容器元素进行遍历,将返回值相同的元素作为一个子容器,并与该相同的值构成一个键值对,最后返回的是一个类型为Map[U,C[T]]的映射。

    // groupedBy拆分为多元组
    println(list.groupBy(_%5))

输出结果

Map(0 -> Vector(5, 10), 1 -> Vector(1, 6), 2 -> Vector(2, 7), 3 -> Vector(3, 8), 4 -> Vector(4, 9))

grouped和sliding

grouped和sliding方法都接受一个整型参数n,两个方法都将容器拆分为多个与原容器类型相同的子容器,并返回由这些子容器构成的迭代器,即Iterator[C[T]]。

其中,grouped按从左到右的方式将容器划分为多个大小为n的子容器(最后一个的大小可能小于n);sliding使用一个长度为n的滑动窗口,从左到右将容器截取为多个大小为n的子容器。

grouped

    // grouped根据指定大小切分
    val newList=list.grouped(3)
    while (newList.hasNext){
      println(newList.next())
    }

输出结果

Vector(1, 2, 3)
Vector(4, 5, 6)
Vector(7, 8, 9)
Vector(10)

sliding

    // sliding滑动切分
    val newListSliding=list.sliding(3)
    while (newListSliding.hasNext){
      println(newListSliding.next())
    }

输出结果

Vector(1, 2, 3)
Vector(2, 3, 4)
Vector(3, 4, 5)
Vector(4, 5, 6)
Vector(5, 6, 7)
Vector(6, 7, 8)
Vector(7, 8, 9)
Vector(8, 9, 10)

你可能感兴趣的:(后端开发)