从 Javaslang 中的 Map<?, Either> 中提取键和左值

Extract keys and left values from a Map<?, Either> in Javaslang

给定一个 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 的创造者

这里有一个基于javaslang-2.1.0-alpha的解决方案。我们利用了 Either 是右偏的这一事实。因为我们关注左边的值,所以我们交换了 Either。如果 flatMap 包含布尔值,则 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);

        }
    }

您在 javaslang-2.0.5 中通过使用像 Tuple.of(s, b).

这样的静态工厂方法实现了同样的效果