首页 > 解决方案 > 使用日志过滤一组 Either[x, y]

问题描述

给定 a Set[Either[BadObject, GoodObject]],我想将其转换为 a Set[GoodObject],同时记录所有BadObjects.

我遇到的问题是,当我尝试在collect通话中添加日志记录时,例如:

someMethodThatReurnsTheSet.collect {
  case Right(value) => value
  case Left(res) => logger.warn(s"Bad object : $res")
}

这改变了返回值,我得到了一个Set[None],这不是我想要的。

标签: scalafunctional-programmingeither

解决方案


尝试partition链式结合

import util.chaining._

someMethodThatReurnsTheSet
  .partition(_.isRight)
  .tap { case (_, lefts) => logger.warn(s"Bad objects $lefts") }
  .pipe { case (rights, _) => rights }

推荐阅读