当前位置:  开发笔记 > 编程语言 > 正文

如何将Optional转换为OptionalInt?

如何解决《如何将Optional转换为OptionalInt?》经验,为你挑选了1个好方法。

我有一个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中可以使转换更优雅的东西?



1> Holger..:

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

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.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有