scala> val l = List(1, 2, 3) l: List[Int] = List(1, 2, 3) scala> val l2 = List(1, 2, 3, 4) l2: List[Int] = List(1, 2, 3, 4) scala> l.foldLeft override def foldLeft[B](z: B)(op: (B, Int) => B): B scala> l.foldLeft(0)((acc, cur) => acc + cur) res12: Int = 6 scala> l2.foldLeft(0)((acc, cur) => acc + cur) res13: Int = 10 scala> l2.foldLeft(0)((acc, cur) => acc * cur) res14: Int = 0 scala> l2.foldLeft(1)((acc, cur) => acc * cur) res15: Int = 24 scala> l2.product res16: Int = 24 scala> l2.foldLeft("")((acc, cur) => acc + ", " + cur.toString) res17: String = , 1, 2, 3, 4 scala> l2.foldLeft("")((acc, cur) => if(acc == "") cur.toString else acc + ", " + cur.toString) res19: String = 1, 2, 3, 4 scala> l2.foldLeft("List(")((acc, cur) => if(acc == "List(") cur.toString else acc + ", " + cur.toString) res20: String = 1, 2, 3, 4 scala> l2.foldLeft("List(")((acc, cur) => if(acc == "List(") "List(" + cur.toString else acc + ", " + cur.toString) res21: String = List(1, 2, 3, 4 scala> l2.foldLeft("List(")((acc, cur) => if(acc == "List(") "List(" + cur.toString else acc + ", " + cur.toString) + ")" res22: String = List(1, 2, 3, 4) scala> l2.foldLeft("0")((acc, cur) => acc + " + " + cur.toString) res23: String = 0 + 1 + 2 + 3 + 4 scala> l2.foldLeft("0")((acc, cur) => "(" + acc + " + " + cur.toString + ")") res24: String = ((((0 + 1) + 2) + 3) + 4) scala> l2.foldLeft("1")((acc, cur) => "(" + acc + " * " + cur.toString + ")") res25: String = ((((1 * 1) * 2) * 3) * 4) scala> l2.foldRight override def foldRight[B](z: B)(op: (Int, B) => B): B scala> l2.foldRight(0)((acc, cur) => acc + cur) res26: Int = 10 scala> l2.foldRight(0)(_ + _) res27: Int = 10 scala> l2.foldRight("0")((cur, acc) => cur.toString + " + " + acc) res28: String = 1 + 2 + 3 + 4 + 0 scala> l2.foldRight("0")((cur, acc) => "(" + cur.toString + " + " + acc + ")") res29: String = (1 + (2 + (3 + (4 + 0)))) scala> l2.foldLeft("0")((acc, cur) => "(" + acc + " + " + cur.toString + ")") res30: String = ((((0 + 1) + 2) + 3) + 4) scala> l2.foldLeft(List[Int]())((acc, cur) => acc ++ List(cur)) res31: List[Int] = List(1, 2, 3, 4) scala> l2.foldLeft(List[Int]())((acc, cur) => acc ++ List(cur * 2)) res32: List[Int] = List(2, 4, 6, 8) scala> l2.foldLeft(List[Int]())((acc, cur) => if(cur % 2 == 1) acc ++ List(cur) else acc) res33: List[Int] = List(1, 3) scala> l2.filter(x => x % 2 == 1) res34: List[Int] = List(1, 3) scala> l2.foldLeft(List[Int]())((acc, cur) => if(cur % 2 == 1) acc ++ List(cur)) :13: error: type mismatch; found : Unit required: List[Int] l2.foldLeft(List[Int]())((acc, cur) => if(cur % 2 == 1) acc ++ List(cur)) ^ scala> l2.map(x => List(x, x)) res36: List[List[Int]] = List(List(1, 1), List(2, 2), List(3, 3), List(4, 4)) scala> l2.map(x => x) res37: List[Int] = List(1, 2, 3, 4) scala> l2.map(x => List(x, x)).flatten res38: List[Int] = List(1, 1, 2, 2, 3, 3, 4, 4) scala> l2.flatMap(x => List(x, x)) res39: List[Int] = List(1, 1, 2, 2, 3, 3, 4, 4) scala> l2.flatMap(x => List(x * 2)) res40: List[Int] = List(2, 4, 6, 8) scala> l2.flatten :13: error: No implicit view available from Int => scala.collection.GenTraversableOnce[B]. l2.flatten ^ scala> List(List(List(1, 1), List(2, 2))) res42: List[List[List[Int]]] = List(List(List(1, 1), List(2, 2))) scala> List(List(List(1, 1), List(2, 2))).flatten res43: List[List[Int]] = List(List(1, 1), List(2, 2)) scala> def mp[A, B](l: List[A])(f: A => B): List[B] = l.flatMap(x => List(f(x))) mp: [A, B](l: List[A])(f: A => B)List[B] scala> mp(l2)(x => x * 2) res44: List[Int] = List(2, 4, 6, 8) scala> mp(l2)(x => x * 3) res45: List[Int] = List(3, 6, 9, 12) scala> l2.flatMap(x => List(x % 2 == 1)) res46: List[Boolean] = List(true, false, true, false) scala> l2.flatMap(x => if(x % 2 == 1) List(x) else List()) res47: List[Int] = List(1, 3)