我正在尝试根据一组条件在列表中查找对象。基本逻辑看起来像这样
for (objectx obj : list)
{
if (object.property1 > criteria1)
//accept object
else (object.property1 == criteria1)
{
if (object.property2 > criteria2)
//accept object
else (object.property2 == criteria2)
{
if (object.property3 > criteria3)
... etc
}
}
}
是否有一种简化方法来简化这种混乱?
答案 0 :(得分:1)
boolean accept = false;
for (int i = 0; i < object.numProps(); i++) {
if (object.prop[i] > criteria[i]) {
accept = true;
break;
} else if (object.prop[i] < criteria[i])
break;
// loop continues only if object.prop[i] == criteria[i]
}
答案 1 :(得分:0)
我会创建一个方法来检查循环中的所有属性,你可以简单地说:
for (objectx obj : list)
{
if(checkProperties(obj))
{
//Do Stuff
}
}
答案 2 :(得分:0)
添加以业务逻辑命名的方法可能有所帮助。然后阅读代码应该像英语一样阅读,实际的比较是在其他地方。它也让人更容易思考。
答案 3 :(得分:0)
如果你想做我之前做的事情可以提供帮助。我想像你一样在NHibernate中搜索数据库中的对象。我创建了Query对象来收集用户输入的每个条件。当我在Query对象上设置相关属性时,我添加了这样的标准。
public bool Archive
{
set
{
if(value)
{
criteria.Add(Restrictions.Eq("Archive", true));
}
}
}
public bool IsFavorite
{
set
{
if (value)
{
criteria.Add(Restrictions.Eq("IsFavorite", true));
}
}
}
如果您只想过滤内存中的对象。您也可以使用Specification Pattern。