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

时间:2015-09-14 22:14:21

标签: functional-programming kotlin

所以这可能比Kotlin更多关于函数式编程,我在那个阶段有点知识是危险的,我在Kotlin编写了应用程序,所以看起来公平地问Kotlin问题作为我感兴趣的Kotlins结构

我有一系列项目,它们是三个批次,所以流可能看起来像

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

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

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

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

由于

1 个答案:

答案 0 :(得分:5)

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

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

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

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