我有一个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.