Playframework 创建将相似元素分组到最大大小列表中的播放枚举

Playframework 创建将相似元素分组到最大大小列表中的播放枚举,playframework,reactivemongo,Playframework,Reactivemongo,我想要一个枚举,将枚举器中的元素分组为最大大小的组,其中组中的所有元素都具有相同的值。因此,它将扫描枚举数并提取值,只要它们的值相同。当它达到一个新值时,它将把以前的所有结果滚动到一个列表中(限制大小)。然后,它将用新值启动一个新列表 为了简单起见,如果我们有如下列表: [3,3,3,3,3,3,4,4,4,6,6,6,6,6,2,2,2,2,2,2,4,4] 最大大小为5,然后按如下方式对其进行分区: [[3,3,3,3,3],[3],[4,4,4],[6,6,6,6,6],[2,2,2,2

我想要一个枚举,将枚举器中的元素分组为最大大小的组,其中组中的所有元素都具有相同的值。因此,它将扫描枚举数并提取值,只要它们的值相同。当它达到一个新值时,它将把以前的所有结果滚动到一个列表中(限制大小)。然后,它将用新值启动一个新列表

为了简单起见,如果我们有如下列表:

[3,3,3,3,3,3,4,4,4,6,6,6,6,6,2,2,2,2,2,2,4,4]
最大大小为5,然后按如下方式对其进行分区:

[[3,3,3,3,3],[3],[4,4,4],[6,6,6,6,6],[2,2,2,2,2],[2],[4,4]]

我一直在尝试Enumerate.grouped、Enumerate.takeWhile和Enumerate.take的各种组合,但我还没有找到任何有效的方法。

您的问题可以通过使用
迭代对象来解决。fold

val-groupingIteratee:Iteratee[Int,List[List[Int]]]=
Iteratee.fold(List.empty[List[Int]])(文件夹(maxElementsInGroup))
其中,
文件夹
是一个定义如下的函数(示例):

def文件夹(max:Int)=(list:list[list[Int]],el:Int)=>{
列表匹配{
无案例=>列表(列表(el))
案例xs::rest=>{
xs匹配{
case head::tail if head==el&&xs.size(el+:xs)+:rest
case head::tail=>List(head)+:(xs+:rest)
}
}
}
}