这里的Optional <Class>有什么问题?

时间:2019-06-11 08:09:54

标签: java lambda java-8 java-stream

我正在尝试迭代对象列表

Optional<QueryEntities>  entities =  InputYamlProcessor.process(ymlFilename);

entities.orElseThrow( ()->{
               logger.error("Unable to parse YAL ,Correct YML and retry");
               new NoExtractorDefinedException("Unable to parse YAL ,Correct YML and retry");
           });

出现以下错误:

Optional类型的方法orElseThrow(Supplier)不适用于参数(()-> {})

我在这里出什么事了吗?

如果QueryEntities类与belw相同:

public class QueryEntities {

    List<QueryEntity> entitiesList;
   }

如何访问每个QueryEntity并检索其字段并打印。

2 个答案:

答案 0 :(得分:4)

Optional#orElseThrow

接受

Supplier<? extends X> exceptionSupplier

(请参见OptionalSupplier

所以您必须提供一个:

entities.orElseThrow(() -> {
       logger.error("Unable to parse YAL ,Correct YML and retry");
       return new NoExtractorDefinedException("Unable to parse YAL ,Correct YML and retry");
});

答案 1 :(得分:1)

在这种情况下,当我们为供应商传递lambda表达式时,

  1. 如果lambda表达式中只有一个语句,即不带{},则无需显式编写return语句。

示例: entity.orElseThrow(()-> new NoExtractorDefinedException(“无法解析YAL,更正YML并重试”));

  1. 如果lambda表达式需要多行,即{},则必须显式返回值。

示例:

entities.orElseThrow(()-> {        logger.error(“无法解析YAL,更正YML并重试”);

   return new NoExtractorDefinedException("Unable to parse YAL ,Correct YML and retry");

});