Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 从映射中提取键和左值<;?,要么>;用爪哇俚语_Functional Programming_Vavr - Fatal编程技术网

Functional programming 从映射中提取键和左值<;?,要么>;用爪哇俚语

Functional programming 从映射中提取键和左值<;?,要么>;用爪哇俚语,functional-programming,vavr,Functional Programming,Vavr,给出一个Map免责声明:我是Javaslang的创建者 下面是一个基于javaslang-2.1.0-alpha的解决方案。我们利用了一个事实,即任何一方都是右倾的。因为我们关注的是左边的值,所以我们交换其中一个。如果flatMap包含布尔值,则它会在其中一个上迭代 import javaslang.collection.Map; import javaslang.control.Either; import static javaslang.API.*; p

给出一个
Map免责声明:我是Javaslang的创建者

下面是一个基于javaslang-2.1.0-alpha的解决方案。我们利用了一个事实,即任何一方都是右倾的。因为我们关注的是左边的值,所以我们交换其中一个。如果flatMap包含布尔值,则它会在其中一个上迭代

    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.collection.Map;
导入javaslang.control.other;
导入静态javaslang.API.*;
公开课考试{
公共静态void main(字符串[]args){
地图(
“a”,左(真),
“b”,右(1),
“c”,左(假));
映射结果=
flatMap((s,e)->e.swap().map(b->Tuple(s,b));
//=HashMap((a,true),(c,false))
println(结果);
}
}

在javaslang-2.0.5中,通过使用静态工厂方法(如
Tuple.of(s,b)

实现了同样的效果,我不熟悉javaslang,因此我不完全知道答案,但如果其中任何一个是“有偏见的”容器,这都是可能的。如果没有偏见,我认为你的解决方案可能是最简单的one@melston你能澄清一下你所说的“有偏见的容器”是什么意思吗?这通常是指具有两种可能状态之一的类似容器。偏差变量是指一种状态为“成功”状态,另一种状态为错误或失败状态。在这种情况下,flatmapping的工作原理与选项非常相似,在None上调用flatmap只返回None,而在Some(x)上调用flatmap则在x上运行并继续。这种方法通常被称为面向铁路的编程,其中故障/无基本上会停止处理。因此,在成功时调用flatmap会处理包含的值,而在失败时调用flatmap只会返回失败。
    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);

        }
    }