2016-05-05 80 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

謝謝你的回答。閱讀我的編輯,因爲我認爲我沒有正確解釋我的問題 –