如何将OptionalLong映射到Optional <long>?

时间:2018-08-13 13:11:10

标签: java java-8 optional

我有一个OptionalLong的实例。但是我的一个库要求使用Optional<Long>作为参数。

如何将我的OptionalLong转换为Optional<Long>

我梦到这样的事情:

OptionalLong secondScreenHeight = OptionalLong.of(32l); // or: OptionalLong.empty()
api.setHeight(secondScreenHeight.maptoRegularOptional()); // .maptoUsualOptional does not exist

4 个答案:

答案 0 :(得分:12)

您可以这样做:

final OptionalLong optionalLong = OptionalLong.of(5);

final Optional<Long> optional = Optional.of(optionalLong)
            .filter(OptionalLong::isPresent)
            .map(OptionalLong::getAsLong);

答案 1 :(得分:9)

我不知道更简单的解决方案,但这将满足您的需求。

OptionalLong secondScreenHeight = OptionalLong.of(32l);
Optional<Long> optional = secondScreenHeight.isPresent() 
    ? Optional.of(secondSceenHeight.getAsLong()) 
    : Optional.empty();
api.setHeight(optional);

答案 2 :(得分:5)

另一种可能性,尽管仅来自JDK 9,是通过新的OptionalLong.stream()方法,该方法返回LongStream。然后可以将其装箱到Stream<Long>

OptionalLong optionalLong = OptionalLong.of(32);
Optional<Long> optional = optionalLong.stream().boxed().findFirst();

使用JDK 8,可以通过跳至Guava中的Streams实用程序类来完成类似的操作:

Optional<Long> optional = Streams.stream(optionalLong).boxed().findFirst();

答案 3 :(得分:2)

这应该有效。

Optional<Long> returnValue = Optional.empty();
if(secondScreenHeight.isPresent()) {
      returnValue = Optional.of(secondScreenHeight.getAsLong());
}