list - Scala 不可变列表添加 'Unit' 元素

标签 list scala functional-programming immutability

我是 scala 的初学者,正在寻找最佳/惯用的方式来完成我打算在这里做的事情。

这就是我想做的

def someMethod(obj:MyObj):List[String] = {
     List[String]() +: 
      {if (somecondition is satisfied) .. " element"} +: 
      { if (another condition) .. " something else " }


}

即该方法检查输入参数对象的一些属性并将元素添加到列表(即要返回的列表)中。如果不满足任何条件,它应该返回一个空列表。

  1. 当然,代码无法编译。但不知何故,对我来说, List[T] + Unit 应该返回 List[T] 似乎很直观。为什么我错了?

还有 2. 请告诉我执行此 Scala 的正确方法。如果我要遍历条件列表,我可以使用理解。

最佳答案

与其过滤 Unit,我宁愿使用一元列表或空列表:

def someMethod(obj:MyObj): List[String] = {
    Nil ++
    ( if (somecondition is satisfied) List(" element") else Nil ) ++
    ( if (another condition) .. List(" something else ") else Nil ) ++
}

编辑:关于您在下面的评论,如果您发现上面的代码过于冗长且难以维护,您仍然可以创建一个辅助函数:

def optElem[T]( condition: Boolean)( value: => T ): Option[T] = if ( condition ) Option( value ) else None
def someMethod(obj:MyObj): List[String] = {
  Nil ++
  optElem (somecondition is satisfied)( " element") ++
  optElem (another condition)(" something else " )
}

关于list - Scala 不可变列表添加 'Unit' 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402156/

相关文章:

c# - 多个线程调用同一函数不起作用

python - 如何在Python 3中映射两个不同长度的列表?

scala - ScalaTest 可以在没有同步调用的情况下检测超时吗(比如在无限循环中?)

ruby-on-rails - 如何使用 Shoulda 正确测试此 Controller 操作?

scala:在函数(val)中定义默认参数与使用方法(def)

java - 弗林克 : Wrap executable non-flink jar to run it in a flink cluster

python - 如何在 python 中将可变长度列表打印为列?

c# - 将排序列添加到列表 C#

python - 在 Python 中,如何检查列表中的 2 个数字是否在彼此的一定百分比内?

scala - Scala 和 Spark 中最简单的文本词形还原方法