foldLeft

函数的定义

首先以Seq为例查询一下函数的定义

def foldLeft[B](z: B)(op: (B, A)  B): B
    Applies a binary operator to a start value and all elements of this traversable or iterator, going left to right.

    Note: will not terminate for infinite-sized collections.

    Note: might return different results for different runs, unless the underlying collection type is ordered or the operator is associative and commutative.

    B
    the result type of the binary operator.

    z
    the start value.

    op
    the binary operator.

    returns
    the result of inserting op between consecutive elements of this traversable or iterator, going left to right with the start value z on the left:

    op(...op(z, x_1), x_2, ..., x_n)
    where x1, ..., xn are the elements of this traversable or iterator. Returns z if this traversable or iterator is empty.

fold 函数将上一步返回的值,作为函数的第一个参数继续参与运算。直到List中的所有的元素被遍历。

Demo

object FoldDemo1 {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 5, 6)

    val list1 = list.fold(5)(minus)
    println(list1)

    val  list2 = list.foldLeft(5)(minus)
    println(list2)

    val list3 = list.foldRight(5)(minus)
    println(list3)
  }

  def minus(n1: Int, n2: Int): Int = {
    n1 - n2
  }
}

上面的示例中,list1和list2的执行结果相当于

(((((5-1)-2)-3)-5)-6)

list3的执行结果相当于

(1-(2-(3-(5-(6-5)))))

Last updated