foldRight
и foldLeft
работают над коллекцией (поток в вашем примере), получают два параметра (базовое значение) и функцию. Эта функция получает также два параметра - аккумулятор и элемент, которые обрабатывают в каждой итерации
Аккумулятор находится сбоку от сгиба (то есть справа foldRight
и слева foldLeft
), поэтому в вашем случае b
является аккумулятором.
Аккумулятор инициализируется как значение по умолчанию (false
в вашем примере)
Другой параметр (a
в вашем примере) - это каждый элемент потока, по которому вы выполняете итерацию.
В этом случае (exists
) будет повторяться до тех пор, пока элемент не удовлетворяет предикату p, в противном случае он будет повторяться до тех пор, пока не достигнет конца Stream
Из API
def foldRight[B](z: B)(op: (A, B) ⇒ B): B
Применяет бинарный оператор к
все элементы этой последовательности и начальное значение, идущие справа налево.
Примечание: не прекращается для коллекций бесконечного размера.
B the result type of the binary operator.
z the start value.
op the binary operator.
возвращает результат вставки op между последовательными элементами
эта последовательность, идущая справа налево с начальным значением z на
право:
op(x_1, op(x_2, ... op(x_n, z)...))
, где x1, ..., xn
- элементы
этой последовательности. Возвращает z, если эта последовательность пуста.
Вы можете проверить весь API здесь