Как правильно написать условие if - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть вопрос о записи условия if в цикле. Неформально хочу, чтобы условие работало следующим образом. У меня будет строка, и я хочу сравнить ее с list строк. Если он не совпадает ни с одним из значений в списке, тогда продолжите и выполните тело оператора if. Если оно совпадает с одним из значений, пропустите тело оператора if. Вот мой код (я написал комментарии просто быть ясным):

Iterator it=row.entrySet().iterator();  
Iterator iter=getPrimaryKey.entrySet().iterator();

Map.Entry pairs=(Map.Entry)it.next();
            if(!(pairs.getKey().equals(iter.next()))){  //this is the condition. I'm talking about. I want the key to run through all the membres of iter. If it is distinct from all of them, go ahead and execute the code in the if statement. 

В любом случае, я не знаю, что я делаю неправильно, поэтому мне было бы интересно услышать предложения.

Ответы [ 5 ]

1 голос
/ 29 апреля 2011

Предполагая, что вы хотите выполнить любое уникальное значение в наборе:

if(!row.entrySet().containsValue(pairs.getValue())
   //execute
1 голос
/ 29 апреля 2011

Если я вас правильно понимаю, вы захотите установить флаг, если он найден, а затем, после того как весь список пройден, используйте этот флаг, чтобы определить, следует ли выполнять тело оператора if за пределами * 1001.* цикл:

boolean found = false;  // start off as not found

// while items available and match not found, keep looking
while(!found && it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    if (/* condition */)
        found = true;  // item has been found
}

// if we made it through whole list without finding match, then do stuff
if (!found)
    // do fun things here
0 голосов
/ 29 апреля 2011

Как насчет этого ... ваши итераторы очень сбивают с толку ...

/*ASSUMPTIONS*/
Map<String, Object> row = something;
Map<String, Object> primaryKeyMap = something;
/*END ASSUMPTIONS*/

Set<Map.Entry<String, Object>> entryset = row.entrySet();
for (Map.Entry<String, Object> entry : entryset) {
    if (primaryKeyMap.containsKey(entry.getKey())) {
        //do stuff...
        break;
    }
}
0 голосов
/ 29 апреля 2011

Мне кажется, что вы хотите проверить, присутствует ли строка в итераторе "it" как одна из строк в getPrimaryKey.entrySet (), так что вы можете напрямую проверить, содержится ли она там.

Iterator it=row.entrySet().iterator();  
Iterator iter=getPrimaryKey.entrySet().iterator();

 while(it.hasNext()){
    Map.Entry pairs=(Map.Entry)it.next();
    if(! getPrimaryKey.keySet().contains(pairs.getKey()){ 
    }
0 голосов
/ 29 апреля 2011

Я предполагаю, что key, на который вы ссылаетесь, String. Я написал бы ваш код следующим образом:

    Map<String, Object> row = getTypedRow();
    Map<String, Object> primaryKey = getTypedPrimaryKey();

    Iterator<Map.Entry<String, Object>> it = row.entrySet().iterator();
    Iterator<Map.Entry<String, Object>> iter = primaryKey.entrySet().iterator();


    for (String key : row.keySet()) {
        if ( ! primaryKey.keySet().contains(key) ) {
            // it will be here only for key from the row that aren't present in the primaryKey map.
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...