优雅的方式来编写基于if语句的标准

时间:2011-08-16 14:11:30

标签: java algorithm simplify

我正在尝试根据一组条件在列表中查找对象。基本逻辑看起来像这样

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
        } 
    }                                  
}

是否有一种简化方法来简化这种混乱?

4 个答案:

答案 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