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

sla*_*dan 10 java optional java-8

我有一个实例 OptionalLong.但我的一个库需要Optional<Long>一个参数.

我怎样才能将我OptionalLong变成一个Optional<Long>

我梦想着这样的事情:

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

mar*_*ran 12

你可以这样做:

final OptionalLong optionalLong = OptionalLong.of(5);

final Optional<Long> optional = Optional.of(optionalLong)
            .filter(OptionalLong::isPresent)
            .map(OptionalLong::getAsLong);
Run Code Online (Sandbox Code Playgroud)


Ore*_*hak 10

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

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


df7*_*899 5

尽管只有JDK 9提供了一种可能性,但还是可以通过new OptionalLong.stream()方法返回new LongStream。然后可以将其装箱到Stream<Long>

OptionalLong optionalLong = OptionalLong.of(32);
Optional<Long> optional = optionalLong.stream().boxed().findFirst();
Run Code Online (Sandbox Code Playgroud)

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

Optional<Long> optional = Streams.stream(optionalLong).boxed().findFirst();
Run Code Online (Sandbox Code Playgroud)

  • 另外,“ findAny”要短2个字符。 (5认同)