Java 从任意一个<;五十、 R>;vavr 背景

Java 从任意一个<;五十、 R>;vavr 背景,java,functional-programming,monads,either,vavr,Java,Functional Programming,Monads,Either,Vavr,我有一个小函数,可以返回或。如果成功,则返回一个浮点值,否则返回一个错误字符串 我的目标是在管道中执行一系列操作,并使用这两种方法实现面向铁路的编程 代码 import java.util.function.function; 导入io.vavr.control.OR; @试验 公开募捐{ 函数任意一个_double=num->{ 如果(num==4.0f) 要么。左(“我不喜欢这个号码”); 返回其中一个。对(num*2); }; 功能增量=x->x+1.0f; 实际浮动= 要么。对(2f)

我有一个小函数,可以返回
。如果成功,则返回一个浮点值,否则返回一个错误字符串

我的目标是在管道中执行一系列操作,并使用这两种方法实现面向铁路的编程

代码
import java.util.function.function;
导入io.vavr.control.OR;
@试验
公开募捐{
函数任意一个_double=num->{
如果(num==4.0f)
要么。左(“我不喜欢这个号码”);
返回其中一个。对(num*2);
};
功能增量=x->x+1.0f;
实际浮动=
要么。对(2f)
.地图(增量)
.map(任意双精度)
.get();
预计浮动=6.0f;
资产质量(预期、实际);
}
这段代码执行一系列简单的操作。首先,我创建一个值为2的任意一个右键,然后我将其递增,最后将其加倍。这些操作的结果是6

问题 数学运算的结果是6.0f,但这不是我得到的结果。相反,我得到了正确的
(6.0f)

这是一个阻止代码编译的问题。我在任意一个单子中都有一个值,但是在检查了它们之后,我没有找到一种方法来取消它的装箱并按原样获取值

我曾考虑过使用
getOrElseGet
,但即使是这个方法也会返回一个右键

问题:
如何访问存储在Orther Monad中的实际值?

使用
flatMap(Orther\u double)
而不是
map(Orther\u double)
我仍然会遇到一个错误:“类型Orther的方法flatMap(函数)未定义”将显式类型赋予
Orther.right(2f)
Orther.right(2f)
)导致另一个错误:“类型的方法flatmap(函数)也未定义”。我是否错过了连接地图和平面地图的一些操作?M是
flatmap
Ahh中的大写字母,我正式是个白痴。检查得好!你能给你的答案加上显式类型吗?不管怎样,我还是会接受它,但它将成为未来的读者。
import java.util.function.Function;
import io.vavr.control.Either;

@Test
public void run(){

    Function<Float, Either<String, Float>> either_double = num -> {
        if(num == 4.0f)
            Either.left("I don't like this number");
        return Either.right(num * 2);
    };

    Function<Float, Float> incr = x -> x + 1.0f;

    Float actual = 
       Either.right(2f)
        .map(incr)
        .map(either_double)
        .get();

    Float expected = 6.0f;

    assertEquals(expected, actual);
}