【问题标题】:Idiomatic way to spilt sequence into three lists using Kotlin使用 Kotlin 将序列拆分为三个列表的惯用方法
【发布时间】:2015-12-11 01:03:21
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

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

标签: functional-programming kotlin


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多