По сути, это тот же вопрос, что и Как уменьшить короткое замыкание в потоке?. Однако, поскольку этот вопрос сфокусирован на потоке логических значений, и его ответ не может быть обобщен для других типов и операций сокращения, я хотел бы задать более общий вопрос.
Как мы можем уменьшить поток, чтобы он закорачивался, когда он сталкивался с поглощающим элементом для операции сокращения?
Типичный математический случай будет 0 для умножения. Это Stream
:
int product = IntStream.of(2, 3, 4, 5, 0, 7, 8)
.reduce(1, (a, b) -> a * b);
будет использовать два последних элемента (7
и 8
) независимо от того, что после обнаружения 0
продукт известен.