Scala正确使用Try和Option组合在一起

时间:2017-03-26 10:19:23

标签: scala

我正在使用Try()来包含对非100%可靠的第三方服务的调用,该服务会返回某种类型的Option()因此接收Some(DataDto)None

所以它看起来像这样:

private def fetchData(): Option(DataDto) {
    val data: Try[Option[DataDto]] = Try(problematicService.getMeStuff())

    data match {
        case Success(maybeDataDto) => {
            maybeDataDto match {
                case Some(dataDto) => Some(dataDto)
                case None => None
            }
       }
       case Failure(_) => None
    }
}

实施此类行为的最佳方式是什么?我觉得这个实现是冗长的。

1 个答案:

答案 0 :(得分:3)

您可以将Try转换为Optionflatten

Try(s.getMeStuff()).toOption.flatten