Scala中如何在foreach内简洁编写Future方法及优化嵌套case语句
Scala嵌套case语句改写方案
你这段代码本质是Future异步回调嵌套导致的多层case冗余,我们可以通过抽离公共逻辑+Future链式操作简化,改写后代码更简洁易维护:
优化后代码
import scala.util.{Success, Failure, Try} def delete( client: TwitterRestClient, userId: Long, keyword: String ): Unit = { // 抽离重复的结果打印逻辑,避免两处case重复写 def printResult[T](action: String): Try[T] => Unit = { case Success(value) => println(s"Success: $action 执行成功,返回值 $value") case Failure(e) => println(s"Fail: $action 执行失败,错误信息 $e") } client.userTimelineForUserId(userId) // 链式处理时间线返回结果,过滤符合关键词的推文 .map(_.data.filter(_.text.contains(keyword))) .onComplete { case Success(tweets) => // 遍历每条符合要求的推文执行删除 tweets.foreach(tweet => client.deleteTweet(tweet.id).onComplete(printResult("删除推文")) ) case Failure(e) => printResult("拉取用户时间线")(Failure(e)) } }
核心优化点
- 把重复的成功/失败打印逻辑抽成公共方法,后续修改日志格式只需要调整一处,减少冗余代码
- 用Future的
map链式操作替代第一层嵌套的代码块,层级更平,可读性更高 - 如果你后续需要对删除结果做聚合处理,还可以用
Future.sequence把多个删除操作的Future合并,进一步简化逻辑
内容的提问来源于stack exchange,提问作者Light
相关产品推荐
相关产品推荐

