这更像是一个编程/逻辑问题。可以使用任何编程语言来解答(我希望使用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它应该被拒绝。
解决问题的最佳解决方案是什么。或者我必须做9(或者其他,我不擅长数学)ifs for 3比较。
答案 0 :(得分:4)
您应该使用And
运算符&&
作为
因此当任何一个字段符合标准时,它就会被添加到 数据结构。我不想要除非它也满足其他人。 假设它满足1但不满足2它应该被拒绝。
if((filterModel != null && partsModel.getPartModel().equalsIgnoreCase(filterModel)) &&
(filterProduct != null && partsModel.getPartName().equalsIgnoreCase(filterProduct)) &&
(filterDescription != null && partsModel.getPartSpecs().contains(filterDescription)))
{
partsModelList.add(partsModel);
}
答案 1 :(得分:1)
这取决于您的背景。如果您想比较多个条件并确保所有条件都通过,您应该使用logical and
之类的
if (partsModel != null) {
if (partsModel.getPartModel().equalsIgnoreCase(filterModel)
&& partsModel.getPartName().equalsIgnoreCase(filterProduct)
&& partsModel.getPartSpecs().contains(filterDescription)) {
partsModelList.add(partsModel);
}
}
如果需要两个或更多个和/或您依赖多个测试用例,您可能更喜欢fuzzy logic -
int pCount = 0;
if (partsModel != null) {
if (partsModel.getPartModel().equalsIgnoreCase(filterModel)) pCount++;
if (partsModel.getPartName().equalsIgnoreCase(filterProduct)) pCount++;
if (partsModel.getPartSpecs().contains(filterDescription)) pCount++;
}
if (pCount > 2) { // <-- or whatever your criteria is
partsModelList.add(partsModel);
}
答案 2 :(得分:1)
您可以将所有条件放在@Sanjeev建议的单一if语句中。但是,如果您有许多条件,这可能会变得难以阅读。
您也可以反转每个条件,并跳过列表中当前迭代的其余部分。如果您有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个条件的构造,我认为这是保持可读性的好方法。