0

我正在尝试根据一组标准在列表中查找对象。基本逻辑是这样的

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

4 回答 4

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]
}
于 2011-08-16T15:01:30.533 回答
0

我会创建一个检查所有属性的方法,然后在你的循环中你可以简单地说:

for (objectx obj : list)
{
    if(checkProperties(obj))
    {
        //Do Stuff
    }
}
于 2011-08-16T14:15:09.250 回答
0

添加以您的业务逻辑命名的方法可能会有所帮助。然后阅读代码应该读起来像英语,实际的比较在其他地方。它也使思考变得更容易。

于 2011-08-16T14:19:01.670 回答
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));
            }
        }
    }

如果您只想过滤内存中的对象。您还可以使用规范模式

于 2011-08-16T14:50:06.577 回答