当前位置: 首页 > 面试题库 >

Guava可选类型,当转换返回另一个Optional时

吕飞翼
2023-03-14
问题内容

我有一种方法可以 Optional<String>

但是此String必须在另一个应用程序级别解析为Integer或Long。

我有一个Function<String, Integer>可以应用于String的值,以产生一个Integer。此转换可能会失败,因为String可能不是整数可分析的值。

我想在转换失败时返回Optional,而不是抛出解析异常

我不能使STRING_TO_INTEGER_FUNCTION返回null,因为Guava不允许这样做:

Exception in thread "main" java.lang.NullPointerException: Transformation function cannot return null.

因此,我唯一能做的就是得到一个,Function<String,Optional<Integer>>但是最终得到的结果Optional<Optional<Integer>>并不十分酷,因为我可能需要对其进行其他转换。

有人知道我该如何在Guava中做类似的事情吗?

Optional.of("Toto").transform(STRING_TO_INTEGER_FUNCTION) = // Optional<Integer> ?

谢谢


问题答案:

我想你可以做到:

public static void main(final String[] args) {
  final Optional<Integer> valid = Optional.of("42")
      .transform(STR_TO_INT_FUNCTION)
      .or(Optional.<Integer>absent());
  System.out.println(valid); // Optional.of(42)
  final Optional<Integer> invalid = Optional.of("Toto")
      .transform(STR_TO_INT_FUNCTION)
      .or(Optional.<Integer>absent());
  System.out.println(invalid); // Optional.absent()
  final Optional<Integer> absent = Optional.<String>absent()
      .transform(STR_TO_INT_FUNCTION)
      .or(Optional.<Integer>absent());
  System.out.println(absent); // Optional.absent()
}

private static final Function<String, Optional<Integer>> STR_TO_INT_FUNCTION =
    new Function<String, Optional<Integer>>() {
      @Override
      public Optional<Integer> apply(final String input) {
        return Optional.fromNullable(Ints.tryParse(input));
      }
    };

当您使用Optional-> transform->或在一行中使用时 用法并不是 那么
笨拙(分配已转换的可选整数将产生Optional<Optional<Integer>>)。



 类似资料:
  • 主要内容:1 什么是Guava Optional类,2 Guava Optional类的语法,3 Guava Optional类的方法,5 Guava Optional类的例子1 什么是Guava Optional类 Optional 是一个不可变对象,用于包含非空对象。可选对象用于表示没有值的空值。此类具有各种实用程序方法,以方便代码处理可用或不可用的值,而不是检查空值。 2 Guava Optional类的语法 3 Guava Optional类的方法 方法 描述 static <T> Op

  • 可选是用于包含非null对象的不可变对象。 可选对象用于表示缺少值的null。 此类具有各种实用程序方法,以便于代码处理可用或不可用的值,而不是检查空值。 Class 声明 (Class Declaration) 以下是com.google.common.base.Optional《T》类的声明 - @GwtCompatible(serializable = true) public abstra

  • Optional是用于包含非null对象的容器对象。 可选对象用于表示缺少值的null。 此类具有各种实用程序方法,以便于代码将值处理为“可用”或“不可用”,而不是检查空值。 它在Java 8中引入,类似于Guava中的Optional。 Class 声明 (Class Declaration) 以下是java.util.Optional《T》类的声明 - public final class O

  • 我尝试通过methodhandles将方法链接在一起,其中一些方法来自泛型类型。如果函数返回泛型类型,我必须为MethodType指定Object.Class,但我看不到将其转换回泛型类型参数类型的简单方法。在大多数情况下,这没有问题,因为invoke似乎自动转换它们,但我必须创建mhs,它可以用InvokeExact运行。难道没有简单的方法使用MethodHandles进行强制转换吗? 我的测试

  • 下面的代码来自一个名为ButterKnife的Android库。我正在弄清楚它是怎么工作的。 我试图重新创建此函数的行为: 和用法: 但是异常并非永远不会被捕获,而是在调用方法时在行中抛出。为什么? 还有,这到底是如何工作的?该方法如何知道要转换到什么?

  • 我为协变返回类型的继承创建了一个小示例。基本上有三种不同的类别: 主应用程序: BaseManager: 鸟经理: 当我重写方法以返回时,为什么我需要将类型转换为? 我使用过的重写方法在返回类型上会有所不同吗?作为参考。 编辑: 我有不同的子模型,它们都继承自。所有模型都允许存在一次。我尝试将这些模型添加到列表中,而不是对每个模型使用单例。使用,我想得到实际的模型。也许我得考虑太多了。