1

给定 a ,将其转换为 a仅包含具有布尔值的条目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())
;

这行得通,但似乎不必要地冗长,而且似乎应该有一些更紧凑、一步、“平面图”的解决方案。

4

1 回答 1

2

免责声明:我是 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).

于 2017-03-12T00:15:43.353 回答