簡體   English   中英

如何使用流訪問父對象變量

[英]How do I access the parent object variables using streams

我需要過濾掉子對象后,才能訪問groupCoverPeriod對象。如何使用流來執行此操作..我編寫了以下代碼,但在** groupCoverPeriod *處收到錯誤(請忽略前綴)並在代碼中加**)

       boolean isCalMethodCal=newInsurancePeriod.getPensionGroup().getGroupCoverPeriods().stream()
                .filter(groupCoverPeriod -> groupCoverPeriod.getStartDate().isBefore(newInsurancePeriod.getStartDate()) && (
                        Objects.isNull(newInsurancePeriod.getEndDate()) || groupCoverPeriod.getStartDate().isAfter(newInsurancePeriod.getEndDate())))
                .filter(groupCoverPeriod -> !groupCoverPeriod.getCalcMethod().equalsIgnoreCase("kiinnitetty"))
                .flatMap(groupCoverPeriod -> groupCoverPeriod.getInsuranceCoverInfos().stream())
                .filter(ici -> ici.getBenefitType().equalsIgnoreCase("VE"))
                        .anyMatch(ici -> !ici.getOverServiceNotification().equals(true)
                                || !ici.getConsideredEarningsInRTAge().equals(true)
                                || (ici.getConsideredStatutoryEarningsInRTAge().equalsIgnoreCase("6300") && beginDate >= 6300)
                                || (ici.getConsideredStatutoryEarningsInRTAge().equalsIgnoreCase("6500") && beginDate >= 6500)
                                || (ici.getDeferralIncreaseSupplementaryPension().equalsIgnoreCase("ei") || ici.getDeferralIncreaseSupplementaryPension().equalsIgnoreCase("elakemuunnos"))
                                || (**groupCoverPeriod**.getTerminationAge().equalsIgnoreCase("yhteinen") && groupCoverPeriod.getGroupSuplInsuranceRTAge() >= beginDate)
                                || (**groupCoverPeriod**.getTerminationAge().equalsIgnoreCase("yksilollinen") && insurancePeriod.getPersonsCoverInfo().getAgeForSupplementaryPension() >= beginDate)
                                || (**groupCoverPeriod**.getTerminationAge().equalsIgnoreCase("wtyel_vahvistettu") && Integer.parseInt(ykService.getPersonBirthYear(newInsurancePeriod.getPerson().getPersonNumber())) >= beginDate)
                                || (**groupCoverPeriod**.getTerminationAge().equalsIgnoreCase("wtyel_ennustettu") && Integer.parseInt(ykService.getPersonBirthYear(newInsurancePeriod.getPerson().getPersonNumber())) >= beginDate));

我什至嘗試過,但這並沒有返回預期的結果。

newInsurancePeriod.getPensionGroup().getGroupCoverPeriods().stream()
                .filter(groupCoverPeriod -> groupCoverPeriod.getStartDate().isBefore(newInsurancePeriod.getStartDate()) && (
                        Objects.isNull(newInsurancePeriod.getEndDate()) || groupCoverPeriod.getStartDate().isAfter(newInsurancePeriod.getEndDate())))
                .filter(groupCoverPeriod -> !groupCoverPeriod.getCalcMethod().equalsIgnoreCase("kiinnitetty"))
                .forEach(groupCoverPeriod -> {
                        boolean isCalMethodCal = groupCoverPeriod.getInsuranceCoverInfos().stream()
                                .filter(ici -> ici.getBenefitType().equalsIgnoreCase("VE"))
                                .anyMatch(ici -> !ici.getOverServiceNotification().equals(true)
                                        || !ici.getConsideredEarningsInRTAge().equals(true)
                                        || (ici.getConsideredStatutoryEarningsInRTAge().equalsIgnoreCase("6300") && beginDate >= 6300)
                                        || (ici.getConsideredStatutoryEarningsInRTAge().equalsIgnoreCase("6500") && beginDate >= 6500)
                                        || (ici.getDeferralIncreaseSupplementaryPension().equalsIgnoreCase("ei") || ici.getDeferralIncreaseSupplementaryPension().equalsIgnoreCase("elakemuunnos"))
                                        || (groupCoverPeriod.getTerminationAge().equalsIgnoreCase("yhteinen") && groupCoverPeriod.getGroupSuplInsuranceRTAge() >= beginDate)
                                        || (groupCoverPeriod.getTerminationAge().equalsIgnoreCase("yksilollinen") && insurancePeriod.getPersonsCoverInfo().getAgeForSupplementaryPension() >= beginDate)
                                        || (groupCoverPeriod.getTerminationAge().equalsIgnoreCase("wtyel_vahvistettu") && Integer.parseInt(ykService.getPersonBirthYear(newInsurancePeriod.getPerson().getPersonNumber())) >= beginDate)
                                        || (groupCoverPeriod.getTerminationAge().equalsIgnoreCase("wtyel_ennustettu") && Integer.parseInt(ykService.getPersonBirthYear(newInsurancePeriod.getPerson().getPersonNumber())) >= beginDate));

您的過濾器似乎遍地都是。 為什么要再次檢查組保障期?

嘗試重新排列代碼,如下所示:

Predicate<GroupCoverPeriod> groupCoverPredicates = // all group cover predicates here filter predicates here
Predicate<InsuranceCoverInfo> iciPredicates = // all insurance cover info filter predicates here;

boolean isCalMethodCal = newInsurancePeriod.getPensionGroup().getGroupCoverPeriods().stream()
        .filter(groupCoverPeriod -> groupCoverPredicates)
        .flatMap(groupCoverPeriod -> groupCoverPeriod.getInsuranceCoverInfos().stream())
        .anyMatch(ici -> iciPredicates);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM