这更多是一个编程/逻辑问题。可以用任何编程语言来回答(我希望使用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(或其他,我不太擅长数学)。
您可以将所有条件放在一个单独的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] 删除。
我来说两句