2016-05-05 42 views
0

我需要检查多个条件是这样的:遍历如果条件

if(condition1 && condition2 && condition3) { 
    ... 
} 

然而,条件数量取决于地图的键的数量。因此,如果地图有一个价值的“如果”应该是:

if(condition1) { 
    ... 
} 

如果地图上有两个按键的“如果”应该是:

if(condition1 && condition2) { 
    ... 
} 

等。

我的问题是,如果有任何的方式来遍历地图和添加条件,“如果”,是这样的:

for(String key : map.keySet()) { 
    //Now how I add conditions in every iteration? 
} 

编辑:

我把我的代码示例因为我认为我没有正确解释我的问题。我有这样的代码:

public Integer count(String columnName1, String valueName1, String columnName2, String valueName2) { 
    Integer toReturn = 0; 

    results.first(); 

    for (RowResult result : results.getResults()) { 
     if(result.get(columnName1).equals(valueName1) && 
         result.get(columnName2).equals(valueName2)) { 
      toReturn++; 
     }  
    } 
    return toReturn; 
} 

此代码只检查两列,我想提高它来检查N.

if(result.get(columnName1).equals(valueName1) && 
    result.get(columnName2).equals(valueName2) ... && 
     result.get(columnNameN).equals(valueNameN)) { 
    toReturn++; 
} 

所以,我创建了一个地图,我把列作为键和值检查为值。新的count方法应该是:

public Integer count(String columnName1, String valueName1, String columnName2, String valueName2) { 
    Integer toReturn = 0; 

    results.first(); 
    for(String column : map.keySet()) { 
     for (RowResult result : results.getResults()) { 
      //I am stucked here with the if 
     } 
    } 
    return toReturn; 
} 
+0

对于是否在地图上每个键的状态有什么不同? –

+0

为什么'for(RowResult result:results.getResults()){for(String column:map.keySet()){/ * something * /}}'应该不起作用? – MikeCAT

回答

1

也许你的意思是财产以后这样

/** 
*criterias hold Map<FieldName,ExpectedValue> 
* 
*/ 
boolean rowFitsTheCriteria(RowResult row,Map<String,String> criterias){ 
    boolean result = criterias.keySet().stream().allMatch(fieldName->row.get(fieldName).equals(criterias.get(fieldName))); 
    return result; 
} 
+0

这就是我一直在寻找的。谢谢 –

+0

乐意帮忙:) – urag

4

使用标志是一种方法。

boolean isTrue = true; 
for(String key : map.keySet()) { 
    if(!condition) { 
     isTrue = false; 
     break; 
    } 
} 

if(isTrue) { 
    ... 
} 
+0

谢谢你的回答。阅读我的编辑,因为我认为我没有正确解释我的问题 –

5

您可以使用财产以后这样的,如果你有Java的8

Map<String,Boolean> myMap = new HashMap<>(); 
    boolean allMatch = myMap.values().stream().allMatch(value->value); 
+0

谢谢你的回答。阅读我的编辑,因为我认为我没有正确解释我的问题 –