当前位置: 首页 > 知识库问答 >
问题:

如何根据选项值获取左/右

祖利
2023-03-14

我试图根据选项值返回值。我的目标是返回。right()如果选项不存在,则代码应返回其中一个。左()。我使用Java 8和vavr 0.9.2

我想避免条件叠加

public Either<String, Integer> doSomething() {
    Optional<Integer> optionalInteger = Optional.of(Integer.MIN_VALUE);
    Option<Integer> integerOption = Option.ofOptional(optionalInteger);

    return integerOption.map(value -> {
      //some other actions here
      return Either.right(value);
    }).orElse(() -> {
      //some other checks her also 
      return Either.left("Error message");
    });
}

编译器失败并显示此消息

Error:(58, 7) java: no suitable method found for orElse(()->Either[...]age"))
    method io.vavr.control.Option.orElse(io.vavr.control.Option<? extends io.vavr.control.Either<java.lang.Object,java.lang.Integer>>) is not applicable
      (argument mismatch; io.vavr.control.Option is not a functional interface
          multiple non-overriding abstract methods found in interface io.vavr.control.Option)
    method io.vavr.control.Option.orElse(java.util.function.Supplier<? extends io.vavr.control.Option<? extends io.vavr.control.Either<java.lang.Object,java.lang.Integer>>>) is not applicable
      (argument mismatch; bad return type in lambda expression
          no instance(s) of type variable(s) L,R exist so that io.vavr.control.Either<L,R> conforms to io.vavr.control.Option<? extends io.vavr.control.Either<java.lang.Object,java.lang.Integer>>)

共有3个答案

殳勇
2023-03-14

我认为@oleksandr pyrohov的答案中多余的泛型和格式有点过于复杂了。我只是这样写:

java prettyprint-override">public Either<String, Integer> doSomething() {
    // ...
    return integerOption
        .map(Either::right)
        .orElseGet(() -> Either.left("Error message"));
}

更新日期:虽然它似乎并不总是自己推断泛型,但很遗憾。

司徒云
2023-03-14

因为您想返回

蒙峰
2023-03-14

orElse返回选项

相反,尝试使用返回TgetOrElse

public Either<String, Integer> doSomething() {
    // ...
    return integerOption.map(
        Either::<String, Integer>right).getOrElse(
            () -> Either.left("Error message"));
}

 类似资料:
  • 假设以下HTML下拉列表: 我正在寻找javascript获得所需的选项文本的基础上,它的值。 比如如果问value=“2”上的文本是什么?答案:“价值2” 我尝试了下面的jquery代码: null null

  • 问题内容: 我正在尝试使用AngularJS获取选项列表的文本值 这是我的代码片段 返回选项的值,例如:prod_1。我正在尝试获取文本值“产品1”。有没有办法做到这一点? 问题答案: 最好的方法是在元素上使用指令。 控制者 HTML 这会将所选对象绑定到属性- 。之后,您可以使用以下命令: jsFiddle :http : //jsfiddle.net/bmleite/2qfSB/

  • 我正在学习AngularJS并尝试实现一个表单。我有一个select元素,我希望能够根据所选文本更改所选值的颜色。 HTML: CSS: 但这不起作用。这里的问题是什么? EDIT1:默认选项在选中时应该是灰色的,甚至在用户打开下拉列表时也应该是灰色的。Rest其他选项应该在两个条件下都有其黑色文本(在选择和下拉列表显示)。 提前道谢。

  • 如何获取selectbox当前选中的选项值? 我尝试了下面的代码,但它不起作用。 任何帮助都将不胜感激。

  • 我有一节课: 值是唯一的,如何通过其值获取属性的名称? 通过反射,例如:

  • 我需要获取包含该字段的C节点(名称=p,值=4) 如何在不使用索引的情况下获得这个?