首页 > 解决方案 > 遍历对象(组)列表的优化解决方案,每个对象都有对象列表,我需要应用继承

问题描述

我正在寻找一种优化的解决方案来遍历我需要应用继承的对象(组)列表:

例如 :

4级:

[Group 1 , group 2 , group 1] ---> each Group [BankArray]  ---> each BankArray [obj 1 ,obj2 ,obj 2]

Same for level 3 
Same for level 2
Same for level 1

而且每个组不仅有BankArray,还有bankDetail对象。

所有级别的结构相同。

我需要做的:取第一个对象 obj 1 并遍历所有其他级别的列表,看看是否有任何对象(相同的货币和相同的 operationType(与其他属性无关)),如果我发现相似性应该删除这个对象从我找到它的第 3 层或第 2 层或第 1 层。

所以这一步从 4 到 3。4 到 2。3 到 1。

然后将在更新后从第 3 级开始下一步(删除重复项):

3 与 2 3 与 1

然后将在更新后从第 2 级开始下一步(删除重复项):

2 与 1

我正在考虑一些解决方案来完成这 3 个解决方案但不完整,第一个解决方案:使用循环然后从列表中删除重复项 it self() 我不知道是否可能:而且这只在 4 到 3 之间

        for (BankGroup bankGroup4 : bankGroupArrayL4) {
         for(BankDetail four :bankDetailLinkageGroup4.getBankDetailArray() ) {
            for (BankDetailLGroup bankDetailGroup3 : bankDetailGroupArrayL3) {
                for(BankDetail three :bankDetailGroup3.getBankDetailArray() ) {
                    if(four.getPymtCrryCd().equals(three.getPymtCrryCd()) && four.getOprnTyp().equals(three.getOprnTyp())) {
                        bankDetailLGroup3.getBankDetailArray().remove(three);
                    }
                }

解决方案 2:未完成并给我转换错误,但我们谈论它本身的逻辑:

        Boolean l4 = (!bankDetailLinkageGroupArrayL4.isEmpty() && bankDetailLinkageGroupArrayL4 != null);
    Boolean l3 = (!bankDetailLinkageGroupArrayL3.isEmpty() && bankDetailLinkageGroupArrayL3 != null);
    Boolean l2 = (!bankDetailLinkageGroupArrayL2.isEmpty() && bankDetailLinkageGroupArrayL2 != null);
    Boolean l1 = (!bankDetailLinkageGroupArrayL1.isEmpty() && bankDetailLinkageGroupArrayL1 != null);
    if (l4) {
        List<BankDetailLinkage> objectsL4 = bankDetailLinkageGroupArrayL4.stream()
                .flatMap(a -> a.getBankDetailLinkageArray().stream())
                .collect(Collectors.toList());
        if (l3) {
            List<BankDetailLinkage> objectsL3 = bankDetailLinkageGroupArrayL3.stream()
                    .flatMap(a -> a.getBankDetailLinkageArray().stream())
                    .filter(two -> objectsL4.stream()
                    .anyMatch(one -> one.getPymtCrryCd().equals(two.getPymtCrryCd())&&
                    two.getOprnTyp().equals(one.getOprnTyp())
                    .collect(Collectors.toList()));
    }
    }

解决方案 3:仅创建一种方法但未完成:

    private void deleteOrAdd(List<BankDetailLinkageGroup> bankDetailLinkageGroupArrayA,
        List<BankDetailLinkageGroup> bankDetailLinkageGroupArrayB, Set<BankDetailLinkage> blackList) {
    if (bankDetailLinkageGroupArrayB.isEmpty() && bankDetailLinkageGroupArrayB == null) {
        for (BankDetailLinkageGroup bankDetailLinkageGroup : bankDetailLinkageGroupArrayA) {
            for (BankDetailLinkage bankDetailLinkage : bankDetailLinkageGroup.getBankDetailLinkageArray()) {
                if (blackList.isEmpty() && blackList == null) {
                    blackList.add(bankDetailLinkage);
                } else {
                    // compare with blackList
                    for (BankDetailLinkage bankDetailLinkageBlackList : blackList) {
                        if (bankDetailLinkage.getPymtCrryCd().equals(bankDetailLinkageBlackList.getPymtCrryCd())
                                && bankDetailLinkage.getOprnTyp().equals(bankDetailLinkageBlackList.getOprnTyp())) {
                            bankDetailLinkageGroup.getBankDetailLinkageArray().remove(bankDetailLinkage);
                        }
                    }
                }
            }
        }
    } else {
        // compare a with b and with blackList
    }
}

我怎样才能找到解决方案?

标签: javaarraysspringoptimizationarraylist

解决方案


推荐阅读