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
为什么不回来呢?
return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
.findFirst();
Run Code Online (Sandbox Code Playgroud)
回来:
return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
.findFirst();
Run Code Online (Sandbox Code Playgroud)
如果源为空,这将返回包含在Optional或empty中的第一个元素.
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)