【问题标题】:Whats the best way of getting a list of a field from a object?从对象中获取字段列表的最佳方法是什么?
【发布时间】:2020-09-21 00:30:03
【问题描述】:

所以现在我在 scala 中有一个带有像这样的可选字段的对象列表

case class Foo(
                   id: String,
                   description: String,
                   OptionalTag: Option[String],
) 

我想要的是遍历对象列表,如果它们存在则只获取可选标签,我目前的方法是这样

     Tags = listOfFoos.map(foo =>
        if (foo.OptionalTag.isDefined) {
          foo.OptionalTag.get
        } else {
          ""
        }
      ).filter(_ != "" -> "")

但是我确定有更好的方法可以做到这一点,然后遍历整个列表两次,但我无法弄清楚。

【问题讨论】:

  • val tags = foos.collect{case Foo(_,_,Some(tag)) => tag}
  • listOfFoos.flatMap(_.OptionalTag)

标签: scala scala-option


【解决方案1】:

对于你提到的具体问题,flatMap是最好的解决方案:

listOfFoos.flatMap(_.OptionalTag)

如果你想做更复杂的处理,collect 是最好的选择,因为它可以同时完成filtermap 的工作:

listOfFoos.collect{ case (_, _, Some(tag)) => "Tag is " + tag }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2021-01-14
    相关资源
    最近更新 更多