Что не так с этой опциональной <Class>здесь? - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь перебрать список объектов

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");
           });

Получение ошибки, как показано ниже:

Метод orElseThrow (Supplier) в типе Optional не применим для аргументов (() -> {})

Что плохого я здесь дон?

если класс QueryEntities такой же:

public class QueryEntities {

    List<QueryEntity> entitiesList;
   }

Как получить доступ к каждому QueryEntity, получить его поля и распечатать.

Ответы [ 2 ]

4 голосов
/ 11 июня 2019
Optional#orElseThrow

занимает

Supplier<? extends X> exceptionSupplier

(см. Дополнительно , Поставщик )

, поэтому вы должны предоставить его:

entities.orElseThrow(() -> {
       logger.error("Unable to parse YAL ,Correct YML and retry");
       return new NoExtractorDefinedException("Unable to parse YAL ,Correct YML and retry");
});
1 голос
/ 11 июня 2019

Когда мы передаем лямбда-выражение в этом случае для Поставщика,

  1. Если в лямбда-выражении есть только один оператор, т. Е. Без {}, то нет необходимости явно писать оператор возврата.

Пример: entity.orElseThrow (() -> new NoExtractorDefinedException («Невозможно проанализировать YAL, исправить YML и повторить»));

Если лямбда-выражению требуется несколько строк, т. Е. {}, То должно явно возвращать значение.

Пример:

entity.orElseThrow (() -> {logger.error ("Невозможно проанализировать YAL, исправить YML и повторить попытку");

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

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...