functional-programming - 使用 Kotlin 将序列拆分为三个列表的惯用方法

标签 functional-programming kotlin

所以这可能更多地是关于函数式编程而不是 Kotlin,我在那个阶段,一点知识都是危险的,而且我用 Kotlin 编写了应用程序,所以问一个 Kotlin 问题似乎是公平的,因为我感兴趣的是它的 Kotlins 结构.

我有一系列项目,它们以三个为一组,因此流可能看起来像

1,a,+,2,b,*,3,c,&.......

我想要做的是将其分成三个列表,目前我正在通过分为两个列表来做到这一点,一个包含数字,一个包含其他所有内容,然后取结果的后半部分,即字母和符号并再次分区,分为字母和符号,因此我最终得到三个列表。

这让我觉得有些低效,也许函数式方法并不是最好的方法。

有没有一种有效的方法可以做到这一点,我的选择是这个还是 for 循环?

谢谢

最佳答案

您可以使用groupBy方法按元素类型对序列中的元素进行分组:

val elementsByType = sequence.groupBy { getElementType(it) }

其中getElementType是返回元素类型的函数:无论它是字母、数字还是符号。此函数可能返回一个数字,例如 1、2、3,或者返回具有 3 个不同条目的某个枚举的值。

groupBy 返回从元素类型到该类型元素列表的映射。

关于functional-programming - 使用 Kotlin 将序列拆分为三个列表的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574783/

相关文章:

javascript - 在数组对象中过滤数组后的返回值

functional-programming - OCaml 选择部分应用程序参数

scala - 在 scala 中递归构建列表的挑战

android - Glide 无法加载服务器图片 url

javascript - 尝试理解 JS 中具有两个参数输入的函数(如 functionX(param1)(param2) 中)

javascript - 使用一个键的值数组过滤多个 javascript 对象

android - 在 Android 的 onClickListener 中多次观察到 LiveData

android - 如何使用 Room 访问 CalendarProvider?

java - 为什么 Kotlin 会收到这样的 UndeclaredThrowableException 而不是 ParseException?

android - Chromecast - Cast Dialogue 没有阴影,无法通过外部触摸取消