使用flatMap删除集合中的Try尝试失败

时间:2016-10-12 14:31:31

标签: scala

我有一个Map [String,String]

如何使用flatMap简单地表达这个表达式?

 val carNumbers = carMap.keys.map(k => Try(k.stripPrefix("car_number_").toInt)).toList.filter(_.isSuccess)

注意:我想删除Failure / Success包装器,只需要一个List [Int]。

2 个答案:

答案 0 :(得分:2)

您似乎只想将Try转换为Option

for {
  key <- carMap.keys
  t <- Try(key.stripPrefix("car_number_").toInt).toOption
} yield t

这将导致Iterable,您可以使用.toList方法将其转换为列表。

你也可以像这样使用oneliner:

carMap.keys.flatMap(k => Try(k.stripPrefix("car_number_").toInt).toOption)

答案 1 :(得分:0)

考虑将collect()与部分功能一起使用:

carMap.keys
    .collect( k => 
      Try(k.stripPrefix("car_number_").toInt) match { 
        case Success(num) => num
        }
    )

这将返回Iterable[Int],其值可以被剥离并转换为Int(假设这是您要查找的内容)。