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

Idiomatic way to spilt sequence into three lists using Kotlin

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

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

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

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

这让我觉得效率有点低,也许函数式方法不是这里的最佳方法。

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

谢谢

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

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

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

groupBy return 是从元素类型到该类型元素列表的映射。