Functional programming 使用Kotlin将序列分成三个列表的惯用方法

Functional programming 使用Kotlin将序列分成三个列表的惯用方法,functional-programming,kotlin,Functional Programming,Kotlin,所以这可能比Kotlin更多的是关于函数式编程,我在那个阶段有一点知识是危险的,我在Kotlin中编写了这个应用程序,所以问一个Kotlin的问题似乎是公平的,因为我对它的Kotlin结构感兴趣 我有一个项目序列,它们是三个批次的,因此流可能看起来像 1,a,+,2,b,*,3,c,&....... 我想做的是把它分成三个列表,目前我把它分成两个列表,一个包含数字,另一个包含所有其他内容,然后把结果的后半部分,字母和符号,再分成字母和符号,这样我就得到了三个列表 这让我觉得有点低效,也

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

我有一个项目序列,它们是三个批次的,因此流可能看起来像

1,a,+,2,b,*,3,c,&.......
我想做的是把它分成三个列表,目前我把它分成两个列表,一个包含数字,另一个包含所有其他内容,然后把结果的后半部分,字母和符号,再分成字母和符号,这样我就得到了三个列表

这让我觉得有点低效,也许功能性方法不是最好的方法

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


谢谢

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

val elementsByType=sequence.groupBy{getElementType(it)}
其中,
getElementType
是返回元素类型的函数:它是字母、数字还是符号。此函数可以返回一个数字,例如1、2、3,或者返回某个包含3个不同条目的枚举的值


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

您能提供当前代码吗?@voddan这个问题是我在代码中遇到的问题的抽象,如果可以的话,我更喜欢这样写问题。我想要的答案是groupBy,如下所述,如果您仍然对代码感兴趣,我很乐意编辑这个问题。