比较对象中的两个以上条件

沙申克·德格洛卡(Shashank Degloorkar)

这更多是一个编程/逻辑问题。可以用任何编程语言来回答(我希望使用C / C ++ / Java / python,而我可能不理解其他语言)。

for(int i = 0 ; i < partsModelMasterList.size() ;i++)
            {
                PartsModel partsModel = partsModelMasterList.get(i);

                // compare model
                if(filterModel != null &&  partsModel.getPartModel().equalsIgnoreCase(filterModel))
                {
                    partsModelList.add(partsModel);
                }
                // compare product name
                else if(filterProduct != null && partsModel.getPartName().equalsIgnoreCase(filterProduct))
                {
                    partsModelList.add(partsModel);
                }
                // compare filterDescription
                else if(filterDescription != null && partsModel.getPartSpecs().contains(filterDescription))
                {
                    partsModelList.add(partsModel);
                }
            }

如您所见,我在这里比较每个字段的方式有所不同。

因此,当任何字段与条件匹配时,它将被添加到数据结构中。我不想要它,除非它也能满足他人。但是同时用户可能会将一些字段留空,这使得其中一些字段成为可能null

假设它满足1但不满足2,则应将其拒绝。

什么是解决该问题的最佳方法。否则,如果我要进行3次比较,那么我必须得9(或其他,我不太擅长数学)。

欧文·博尔维特(Erwin Bolwidt)

您可以将所有条件放在一个单独的if语句中,例如@Sanjeev建议。但是,如果您有许多条件,则可能很难阅读。

您还可以反转每个条件,并在列表中跳过当前迭代的其余部分。如果你有if (a != null && a.equals(反的变成if (a == null || !a.equals(

然后您的代码变为:

    for (int i = 0; i < partsModelMasterList.size(); i++) {
        PartsModel partsModel = partsModelMasterList.get(i);

        // compare model
        if (filterModel == null || !partsModel.getPartModel().equalsIgnoreCase(filterModel)) {
            continue;
        }
        // [...] Other two conditions removed for brevity

        partsModelList.add(partsModel);
    }

但是在这种典型的过滤中,您想要的是:

合并用户已为其输入值的所有条件,但是如果用户未输入值,则不要对该条件进行过滤。

为此,仅当用户输入该特定条件的并且该值与您正在检查的当前对象不匹配时,才可以跳过当前迭代的其余部分然后,您的代码将变为:

    for (int i = 0; i < partsModelMasterList.size(); i++) {
        PartsModel partsModel = partsModelMasterList.get(i);

        // compare model
        if (filterModel != null && !partsModel.getPartModel().equalsIgnoreCase(filterModel)) {
            continue;
        }
        // compare product name
        else if (filterProduct != null && !partsModel.getPartName().equalsIgnoreCase(filterProduct)) {
            continue;
        }
        // compare filterDescription
        else if (filterDescription != null && !partsModel.getPartSpecs().contains(filterDescription)) {
            continue;
        }
        partsModelList.add(partsModel);
    }

我已经在超过15个条件的代码中使用了类似的构造,我认为这是保持其可读性的好方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章