如何将Optional转换为OptionalInt?

我有一个Optional想要“转换”为的OptionalInt,但是似乎没有一种简单的方法可以做到这一点。

这是我想做的(人为的示例):

public OptionalInt getInt() {

return Optional.ofNullable(someString).filter(s -> s.matches("\\d+")).mapToInt(Integer::parseInt);

}

但是,没有mapToInt()方法Optional

我能想到的最好的是:

return Optional.ofNullable(someString)

.filter(s -> s.matches("\\d+"))

.map(s -> OptionalInt.of(Integer.parseInt(s)))

.orElse(OptionalInt.empty());

但这似乎并不优雅。

我是否在JDK中缺少某些东西可以使转换更加优雅?

回答:

虽然代码不比普通条件表达式更具可读性,但是有一个简单的解决方案:

public OptionalInt getInt() {

return Stream.of(someString).filter(s -> s != null && s.matches("\\d+"))

.mapToInt(Integer::parseInt).findAny();

}


使用Java 9,您可以使用

public OptionalInt getInt() {

return Stream.ofNullable(someString).filter(s -> s.matches("\\d+"))

.mapToInt(Integer::parseInt).findAny();

}

如前所述,它们都不比普通的条件表达式更具可读性,但是我认为,它看起来仍然比使用条件表达式更好mapOrElseGet(而且第一个变体不需要Java 9。

以上是 如何将Optional转换为OptionalInt? 的全部内容, 来源链接: utcz.com/qa/414158.html

回到顶部