Java 8 - 返回一个空的Optional

Nuñ*_*ada 1 java optional java-8

我有这个方法,我想返回一个空的可选项是没有找到

@Override
public Optional<Menu> findBySymbol (String symbol) {
    Optional<Menu> menu = 
                    StreamSupport
                    .stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                    .findFirst();

    return menu.orElse(Optional.empty());

}
Run Code Online (Sandbox Code Playgroud)

但是我收到了编译错误: Type mismatch: cannot convert from Optional<Object> to Menu

Eug*_*ene 9

为什么不回来呢?

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                     .findFirst();
Run Code Online (Sandbox Code Playgroud)


Ous*_* D. 5

回来:

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                    .findFirst();
Run Code Online (Sandbox Code Playgroud)

如果源为空,这将返回包含在Optional或empty中的第一个元素.


dav*_*xxx 5

Optional.orElse(T other)如果出现则返回值,否则返回参数作为值.
因此编译器期望作为参数类型的变量具有与用于的泛型相同的类型Optional.在这里你有一个Optional<Menu>,所以Menu预期.
而编译错误在这里:

return menu.orElse(Optional.empty());
Run Code Online (Sandbox Code Playgroud)

请注意,主要目的Optional是确实在退出时包装值或包装为空(而不是null).
因此,要从诸如findFirst()或之类的流处理中获取空选项findAny(),您不需要执行任何操作.
正如其他人所说,这就足够了:

return  StreamSupport
        .stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
        .findFirst();
Run Code Online (Sandbox Code Playgroud)