迭代条件

时间:2016-05-05 10:58:38

标签: java

我需要检查多个这样的条件:

[self.table setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
[self.table setSeparatorColor:[UIColor grayColor]];

但是,条件数取决于地图的键数。因此,如果地图有一个值,那么"如果"应该是:

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

如果地图有两个键,那么"如果"应该是:

if(condition1) {
    ...
}

等等。

我的问题是,是否有任何方法可以迭代地图并为" if"添加条件,如:

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

修改

我举了一个代码示例,因为我认为我没有正确解释我的问题。我有这段代码:

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

此代码仅检查两列,我想改进它以检查N。

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

所以,我创建了一个地图,我将列作为键和值来检查值。新的if(result.get(columnName1).equals(valueName1) && result.get(columnName2).equals(valueName2) ... && result.get(columnNameN).equals(valueNameN)) { toReturn++; } 方法应为:

count

3 个答案:

答案 0 :(得分:5)

如果你有java 8

,你可以使用这样的东西
    Map<String,Boolean> myMap = new HashMap<>();
    boolean allMatch = myMap.values().stream().allMatch(value->value);

答案 1 :(得分:4)

使用旗帜是一种方式。

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

if(isTrue) {
    ...
}

答案 2 :(得分: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;
}