所以这可能更多地是关于函数式编程而不是 Kotlin,我在那个阶段有点知识是危险的,我用 Kotlin 编写了这个应用程序,所以问一个 Kotlin 问题似乎是公平的,因为它的 Kotlins 结构是我感兴趣的。
我有一系列项目,它们是三批的,所以流可能看起来像
1,a,+,2,b,*,3,c,&....... 我想要做的是把它分成三个列表,目前我通过分成两个列表来做到这一点,一个包含数字,一个包含其他所有内容,然后取结果的后半部分,字母和符号和再次划分为字母和符号,因此我得到了三个列表。
这让我觉得效率低下,也许功能方法不是这里最好的方法。
有没有一种有效的方法来做到这一点,我的选择是这个还是一个 for 循环?
您可以使用groupBy方法按元素类型对序列的元素进行分组:
groupBy
val elementsByType = sequence.groupBy { getElementType(it) }
函数返回元素的类型在哪里getElementType:它是字母、数字还是符号。此函数可能返回一个数字,例如 1、2、3,或具有 3 个不同条目的某个枚举的值。
getElementType
groupBy返回从元素类型到该类型元素列表的映射。