【问题标题】:Java stream ifPresent orElse /orElseGetJava 流 ifPresent orElse /orElseGet
【发布时间】:2019-03-06 13:50:47
【问题描述】:

你好,我在这里做错了什么

我想获取基础 ID,如果它不存在,则获取保险类型.. 代码 sn-ps 粘贴在下面.. 但我在 orElse 部分遇到错误,我什至尝试过 orElseGet() ...它说“Lambda的目标类型必须是一个接口”..

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

【问题讨论】:

  • .orElse(getInsuranceType(insurance, companyInsurances));
  • 我也试过了,我得到 .. orElse (java.lang.String) in Optional cannot be applied to (java.util.Optional)
  • 是的。正确的! getFoundationId(...).orElse(getInsuranceType(...).orElse("")); 最好遵循@Ravinda 的回答
  • 可能只是(相当相关)stackoverflow.com/questions/28514704/…的副本

标签: java java-8 java-stream


【解决方案1】:

使用 Java-9 及更高版本,您可以简单地将 Optionals 使用 Optional.or 链接为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2019-07-19
    • 2017-09-27
    相关资源
    最近更新 更多