kotlin - Kotlin:将列表拆分为分组列表的功能方法
问题描述
我想根据“拆分谓词”对列表中的特定项目进行分组。我的意思的一个例子:
val list = listOf("1", "2", "3", "", "4", "5", "6", "", "7")
// looking for: a nice readable (maybe functional?) way to get to:
val result = listOf(
listOf("1", "2", "3"),
listOf("4", "5", "6"),
listOf("7"),
)
如您所见,我想将列表拆分为哪些项目item.isBlank()
- 我也想在此过程中删除这些项目。
我知道如何强制执行,但我认为必须有一个不错的、可读的、实用的方式!
非常感谢和问候
马克
解决方案
我有一个类似于马特的解决方案(不得不跑去开会,不能早点发布!)。它实质上是相同的,但允许您指定要拆分的任意谓词,说明您可能以空白项目开头并以不需要的空列表结束(或者如果您有两个项目与谓词匹配)一行),并被定义为扩展函数:
fun <T> List<T>.split(predicate: (T) -> Boolean): List<List<T>> =
fold(mutableListOf(mutableListOf<T>())) { acc, t ->
if (predicate(t)) acc.add(mutableListOf())
else acc.last().add(t)
acc
}.filterNot { it.isEmpty() }
并称之为:
list.split { it.isBlank() }
// 返回 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
推荐阅读
- java - 如何手动创建具有依赖关系的 Java 应用程序
- angular - observable 的模拟包含缺失值
- javascript - 无法使用 NEXTJS 在堆栈中读取 JSX 内的反应状态
- python - 使用过滤器在 OpenCV 中保存视频
- c# - NPOI 破坏 xlsm 工作簿
- python - 我收到错误“TypeError:'type' 对象不支持项目分配”
- vb.net - 格式化时间跨度,小时数超过 24,而不是使用天数部分
- elasticsearch - 如果实体索引是基于时间的,如何使用 ElasticsearchEntityMapper?
- python - python - 如何在python列表中找到在n个组合中总和为给定数字的数字组合?
- c++ - 计算中间值的最通用方法