首页 > 解决方案 > Java 流 ifPresent orElse /orElseGet

问题描述

你好我在这里做错了什么

我想获得基础 Id ,如果它不存在则获得 Insurance Type.. 代码片段粘贴在下面.. 但我在 orElse 部分收到错误我什至尝试过 orElseGet() ...它说“目标类型Lambda 必须是一个接口”..

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

…</p>

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

标签: javajava-8java-stream

解决方案


使用 Java-9 及更高版本,您可以Optional使用以下方式简单地链接此类 s Optional.or

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

推荐阅读