如何将OptionalLong映射到Optional ?

我有一个OptionalLong的实例。 但是我的一个库需要一个Optional作为参数。

如何将OptionalLong转换为Optional

我梦想着这样的事情:

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

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

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

你可以这样做:

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

LongStream一种可能性,虽然仅来自JDK 9,是通过新的OptionalLong.stream()方法,它返回一个LongStream 。 然后可以将其装箱为Stream

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

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

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

这应该工作。

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