【问题标题】:How to call getOrElse + foreach如何调用 getOrElse + foreach
【发布时间】:2020-08-09 08:06:21
【问题描述】:

假设我有带有 Option[Map[String, String] 的案例类,我想迭代抛出它。

此代码在 Scala 2.13 中有效,但在 Scala 2.11 中构建失败。

some.getOrElse(None).foreach {
case (key: String, value: String) =>
  if true doSomething
}

上面写着Cannot resolve symbol foreach 如何解决?

【问题讨论】:

  • some.getOrElse(None) 相当于什么都不做。如果 Option 为空怎么办?没做什么?另外,您确定要 forach 或者 map 还是其他高级功能可能更好?
  • 为什么 some.getOrElse(None) 相当于什么都不做? some 不是 Some() 对象,它是我自己的类。我想避免 None.get exeption - 如果 Option 包含 None - 返回 None。否则迭代 throw map。
  • getOrElse 获取值或默认值,如果是 None 那么是的,它实际上不等于什么都不做,更糟糕的是,因为你会带有 Any 类型的值。也许你想要的是opt.map { map => map.map { case (key, value) =>???}}

标签: scala scala-collections


【解决方案1】:

为什么不默认为空地图?

some.getOrElse(Map.empty()).foreach {
case (key: String, value: String) =>
  if true doSomething
}

【讨论】:

  • 这就是我所要求的。 Idk 为什么但在 Scala 2.13 中我写了 getOrElse(None).foreach 并且它是有效的。
【解决方案2】:

它无法在 2.13(或 2.12)上编译,因此您的代码显然存在问题。

我认为您正在尝试做的是:

some.map(_.map {
  case (key: String, value: String) =>
    ???
})

如果someNone,这将返回None,否则它将在Map 上调用map,并在Some(?) 中返回结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多