2011-08-16 35 views
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 
     } 
    }         
} 

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

+0

是SO缩进那个错误还是缺少括号? –

+0

我失去了大括号 –

+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] 
} 
0

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

for (objectx obj : list) 
{ 
    if(checkProperties(obj)) 
    { 
     //Do Stuff 
    } 
} 
0

你的业务逻辑命名的添加方法可能会有帮助。然后阅读代码应该像英文一样阅读,实际比较是其他地方。它也使得更容易思考。

0

如果你想做一些像我之前做的事情那样可以提供帮助。我想像你一样用NHibernate在数据库中搜索对象。我创建了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

相关问题