Поток Java ifPresent orElse / orElseGet - PullRequest
1 голос
/ 06 марта 2019

Привет, что я тут делаю не так

Я хочу получить базовый идентификатор, если его нет, тогда получите страховой тип .. фрагменты кода вставлены ниже ... но я получаю сообщение об ошибке в части orElse, которую я даже пытался orElseGet () ... там написано " Целевым типом лямбды должен быть интерфейс "..

String type = getFoundationId(companyInsurances).orElse(()->getInsuranceType(insurance, companyInsurances));

...

private Optional<String> getInsuranceType(Insurance insurance, List<CompanyInsurance> companyInsurances) {
    return InsurancePeriodHelper.findFirstCompanyInsuranceOfType(companyInsurances, CompanyInsuranceType.POLICY_HOLDER.getValue())
             .map(companyInsurance-> insurance.getProduct());
}

private Optional<String> getFoundationId(List<CompanyInsurance> companyInsurances) {
    return InsurancePeriodHelper.findFirstCompanyInsuranceOfType(companyInsurances, CompanyInsuranceType.FOUNDATION.getValue())
            .map(companyInsurance -> companyInsurance.getCompany().getFoundationIdentifier().toString());
}

1 Ответ

0 голосов
/ 06 марта 2019

С Java-9 и выше вы можете просто связать такие Optional s, используя Optional.or как:

String type = getFoundationId(companyInsurances)
        .or(() -> getInsuranceType(insurance, companyInsurances))
        .orElse("defaultValue");
...