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

我有一种方法可以 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>>)。

以上是 Guava可选类型,当转换返回另一个Optional时 的全部内容, 来源链接: utcz.com/qa/405958.html

回到顶部