【发布时间】:2017-01-31 22:32:58
【问题描述】:
给定Map<String, Either<Boolean, Integer>,将其转换为仅包含布尔值条目的Map<String, Boolean> 的最直接方法是什么?
现在我有这个:
Map<String, Boolean> boolMap = eitherMap
.filter(entry -> entry._2.isLeft())
.map((key, value) -> Tuple.of(key, value.getLeft())
;
这行得通,但似乎不必要地冗长,而且似乎应该有一些更紧凑的一步,“平面图????”解决方案。
【问题讨论】:
-
我不熟悉 Javaslang,所以我不完全知道答案,但如果 Either 是一个“有偏见的”容器,它可能是可能的。如果不偏不倚,我认为您的解决方案可能是最简单的解决方案
-
@melston 你能解释一下“有偏见的容器”是什么意思吗?
-
这通常用于具有两种可能状态之一的 Either-like 容器。有偏见的变体是一种状态是“成功”状态而另一种是错误或失败状态的变体。在这种情况下,平面映射的工作原理很像 Option,在 None 上调用 flatmap 只会返回 None,而在 Some(x) 上调用 flatmap 会在 x 上运行并继续。这种方法通常被称为面向铁路的编程,其中失败/无基本上停止处理。因此,在成功时调用 flatmap 会处理包含的值,而在失败时调用 flatmap 只会返回失败。
标签: functional-programming vavr