scala - 过滤一组Either[x, y],记录

标签 scala functional-programming either

给定一个 Set[Either[BadObject, GoodObject]] ,我想把它转换成 Set[GoodObject] , 同时记录所有 BadObjects .

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

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

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

最佳答案

试试 partition 结合 chaining

import util.chaining._

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

关于scala - 过滤一组Either[x, y],记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60987651/

相关文章:

scala - BoxedUnit 与 Scala 中的单位

.net - 用功能语言表示有状态的事物

c# - 用 Either/Maybe/Option 替换异常

haskell - 具有两个以上选项的 Tuple 或 Either 的相反名称是什么?

java - 在 Java 中用模 X 实现算术

scala - Spark/Scala 打开压缩的 CSV 文件

javascript - 调用列表中的每个函数

scala - 用于理解中的任一值的模式匹配?

scala - 如何将案例类序列化为制表符分隔的文本文件?

recursion - 如何在 SML 中递归计算数字的位数