Java8-返回一个空的可选

Java8-返回一个空的可选,java,java-8,optional,Java,Java 8,Optional,我有一个方法,我想返回一个空的可选值,因为找不到任何内容 @Override public Optional<Menu> findBySymbol (String symbol) { Optional<Menu> menu = StreamSupport .stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)

我有一个方法,我想返回一个空的可选值,因为找不到任何内容

@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());

}
但是我得到了一个编译错误:类型不匹配:无法从可选转换到菜单

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                    .findFirst();
如果源为空,这将返回用可选或空可选包装的第一个元素

只需返回:

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                    .findFirst();

如果源为空,这将返回用可选或空可选包装的第一个元素

为什么不直接退回呢

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                     .findFirst();

为什么不退回呢

return StreamSupport.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
                     .findFirst();
Optional.orElseT other返回值(如果存在),否则该参数将作为值返回。 因此,编译器希望参数类型为一个变量,该变量的类型与用于可选变量的泛型类型相同。这里有一个可选菜单,因此需要一个菜单。 鉴于此处的编译错误:

return menu.orElse(Optional.empty());
请注意,Optional的主要用途实际上是在退出时包装值,或者包装为空而不是null。 因此,要从流处理(如findFirst或findAny)中获取一个空的可选项,无需执行任何操作。 正如其他人所说,这就足够了:

return  StreamSupport
        .stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
        .findFirst();
Optional.orElseT other返回值(如果存在),否则该参数将作为值返回。 因此,编译器希望参数类型为一个变量,该变量的类型与用于可选变量的泛型类型相同。这里有一个可选菜单,因此需要一个菜单。 鉴于此处的编译错误:

return menu.orElse(Optional.empty());
请注意,Optional的主要用途实际上是在退出时包装值,或者包装为空而不是null。 因此,要从流处理(如findFirst或findAny)中获取一个空的可选项,无需执行任何操作。 正如其他人所说,这就足够了:

return  StreamSupport
        .stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
        .findFirst();

只需返回第一个表达式,删除最后一行。它没有任何用处。但是整个方法似乎有些过分——为什么创建一个流只是为了获取第一项?为什么创建一个并行流来返回第一项?也许你指的是芬丹?顺便问一下,为什么你要用这个符号作为方法的参数?它当前未使用!只需返回第一个表达式,删除最后一行。它没有任何用处。但是整个方法似乎有些过分——为什么创建一个流只是为了获取第一项?为什么创建一个并行流来返回第一项?也许你指的是芬丹?顺便问一下,为什么你要用这个符号作为方法的参数?它当前未使用!