2016-09-07 2 views
0

Рассмотрим следующий код: цикл может завершиться, как только он достигнет значения false. Есть ли лучший способ, чем проверка на false после каждой итерации?Логические операторы коротких замыканий через Iterable

boolean result = true; 
List<Boolean> bList = new ArrayList<>(); 
for (boolean b : bList) { 
    result = result && b; 
    if (!result) { 
     break; 
    } 
} 

ответ

0

Использование Stream.allMatch, который является короткое замыкание операции.

List<Boolean> bList = new ArrayList<>(); 
boolean result = bList.stream().allMatch(b -> b); 
1

Рассмотрим извлечение из цикла его метода:

boolean allTrue(List<Boolean> bools) { 
    for (boolean b : bools) 
    if (!b) 
     return false; 
    } 
    return true; 
} 
4

насчет

if (bList.contains(false)) { 
    ... 
+0

См. Мой ответ для более общего решения, которое позволяет вам оценивать предикат по любому типу 'Iterable'. – Roland

+0

Этот подход может быть более общим, но его функциональность не такая очевидная .. :) – Reimeus

Смежные вопросы