给定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())
;
这很有效,但似乎没有多少罗嗦,似乎应该有一些更紧凑,一步到位的“flatmap that”解决方案。
答案 0 :(得分:2)
免责声明:我是Javaslang的创作者
这是一个基于javaslang-2.1.0-alpha的解决方案。我们利用了这两个事实是正确的偏见。因为我们专注于左侧值,所以我们交换了Either。 flatMap迭代然后在Either上,如果它包含一个布尔值。
import javaslang.collection.Map;
import javaslang.control.Either;
import static javaslang.API.*;
public class Test {
public static void main(String[] args) {
Map<String, Either<Boolean, Integer>> map = Map(
"a", Left(true),
"b", Right(1),
"c", Left(false));
Map<String, Boolean> result =
map.flatMap((s, e) -> e.swap().map(b -> Tuple(s, b)));
// = HashMap((a, true), (c, false))
println(result);
}
}
您可以使用Tuple.of(s, b)
等静态工厂方法在javaslang-2.0.5中实现相同的目标。