Kotlin中使用GROUP BY分组时如何限制每组返回的条目数量
你可以在groupBy分组后对每个分组的列表做截取处理,Kotlin标准库提供了非常简洁的实现方式:
方案1:保留分组Map结构,每组取前20条
val groupedPlayers = players.groupBy { it.skill } .mapValues { (_, groupList) -> groupList.take(20) }
执行后groupedPlayers是键为skill属性值、值为对应20个玩家的Map结构。
方案2:需要随机抽取每组20条而非取前20条
如果不希望固定取每个分组的前20条,要随机抽样的话可以先打乱分组列表再截取:
val groupedPlayers = players.groupBy { it.skill } .mapValues { (_, groupList) -> groupList.shuffled().take(20) }
方案3:最终输出80条扁平列表而非分组结构
如果不需要保留分组的Map结构,直接要合并后的80条总数据,可以用flatMap处理:
val resultList = players.groupBy { it.skill } .flatMap { (_, groupList) -> groupList.take(20) }
如果你的数据量极大,想要避免全量分组的性能开销,也可以用groupingBy配合折叠操作实现流式裁剪,对于400条量级的数据集来说上面的写法性能完全足够。
内容的提问来源于stack exchange,提问作者Sharan
相关产品推荐
相关产品推荐

