Переключить логическое значение, но только один раз?(Джава) - PullRequest
4 голосов
/ 02 сентября 2011

Время от времени необходимо сохранять логическое значение только один раз (чтобы записать, что оно изменилось с false на true или наоборот) в цикле, при этом цикл выполняется до конца, но больше не заботится об изменениях в логическом значении. Пример:


    public static boolean dbDelete(Collection argObjectCollectionToDelete) {
        boolean result = true;
        for (Object object : argObjectCollectionToDelete) {
            boolean dbDelete = dbDelete(object);
            if (!dbDelete) {
                result = false;
            }
        }
        return result;
    }

Есть ли способ выполнить эквивалент кода


if (!dbDelete) {
    result = false;
}

или


if (!dbDelete && !result) {
    result = false;
}

более элегантно, желательно в одну строку?

Ответы [ 4 ]

8 голосов
/ 02 сентября 2011

Как насчет:

result &= dbDelete(object);

Это эквивалентно:

result = result & dbDelete(object);

Таким образом, это будет верно только в том случае, если result было ранее true и dbDelete возвращало true.

1 голос
/ 02 сентября 2011

Попробуйте добавить больше значения в имена переменных - это облегчит задачу.

public static boolean dbDelete(Collection argObjectCollectionToDelete) {
    boolean completedSuccessfully = true;
    for (Object object : argObjectCollectionToDelete) {
        boolean dbDelete = dbDelete(object);
        if (completedSuccessfully && !dbDelete) {  //won't change anymore after failure
            completedSuccessfully = false;
        }
    }
    return completedSuccessfully;
}
1 голос
/ 02 сентября 2011

результат = dbDelete (объект)?результат: ложь;

1 голос
/ 02 сентября 2011
if (!dbDelete(object)) {
    result = false;
}
...