【问题标题】:Scala apply filter based on a flagScala基于标志应用过滤器
【发布时间】:2018-05-23 05:03:30
【问题描述】:

仅在标志设置为 true 时应用过滤器,我当前的解决方案如下所示:

val list = List(5,17,25,80)
val checkAge = false
val ageCheckedList = list.filter(i => i>18)

想法是,如果 checkAge 设置为 true,则应应用过滤器,但如果 checkAge 为 false,则不执行过滤。

表达这一点的简洁方式是什么?我想出的最好的是:

ageCheckedList = list.filterNot(i => checkAge && i <= 18)

至少可以说读起来很混乱。

【问题讨论】:

    标签: scala collections filter


    【解决方案1】:

    我认为你所拥有的一切都很好。您可以颠倒逻辑,这也许会使它更具可读性。

    list.filter(i => !checkAge || i <= 18)
    

    这基本上是说我们没有检查年龄或年龄在范围内。

    【讨论】:

      【解决方案2】:

      以下内容可能更清楚地表达您的意图:

      val ageCheckedList = if (checkAge) list.filter(_ > 18) else list
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多