斯卡拉 | flatMap 方法
在 Scala 中, flatMap()方法与map() 方法相同,但唯一的区别是在flatMap中,项目的内部分组被删除并生成了一个序列。它可以定义为map方法和flatten方法的混合。通过运行map方法和flatten方法获得的输出与flatMap()获得的输出相同。所以,我们可以说flatMap先运行map方法,然后运行flatten方法来生成想要的结果。
笔记:
- 它有一个内置的Option类,因为 Option 可以表示为一个最多有一个元素的序列,即,它要么是空的,要么只有一个元素。
- flatten() 方法用于分解 Scala 集合的元素,以便构造具有相似类型元素的单个集合。
让我们看一个例子来说明flatMap是如何工作的。
val name = Seq("Nidhi", "Singh")
情况1:
让我们在指定的序列上应用 map() 和 flatten()。
// Applying map()
val result1 = name.map(_.toLowerCase)
// Output
List(nidhi, singh)
// Applying flatten() now,
val result2 = result1.flatten
// Output
List(n, i, d, h, i, s, i, n, g, h)
案例二:
让我们直接在给定的序列上应用 flatMap()。
name.flatMap(_.toLowerCase)
// Output
List(n, i, d, h, i, s, i, n, g, h)
所以,我们可以在这里看到两种情况下得到的输出是相同的,因此,我们可以说flatMap是map和flatten方法的组合。
现在,让我们看一些flatMap方法的例子。
- 在一系列字符串上使用flatMap 。
例子:// Scala program of flatMap // Creating object object GfG { // Main method def main(args:Array[String]) { // Creating a sequence of strings val portal = Seq("Geeks", "for", "Geeks") // Applying flatMap val result = portal.flatMap(_.toUpperCase) // Displays output println(result) } }
输出:List(G, E, E, K, S, F, O, R, G, E, E, K, S)
在这里,将flatMap应用于所述序列,因此生成了字符序列列表。
- 将flatMap与其他功能一起应用。
例子 :// Scala program of flatMap // Creating object object GfG { // Main method def main(args:Array[String]) { // Creating a list of numbers val list = List(2, 3, 4) // Defining a function def f(x:Int) = List(x-1, x, x+1) // Applying flatMap val result = list.flatMap(y => f(y)) // Displays output println(result) } }
输出:List(1, 2, 3, 2, 3, 4, 3, 4, 5)
在这里, flatMap应用于程序中定义的另一个函数,因此生成了一个数字序列列表。让我们看看如何计算输出。
List(List(2-1, 2, 2+1), List(3-1, 3, 3+1), List(4-1, 4, 4+1)) // After evaluation we get, List(List(1, 2, 3), List(2, 3, 4), List(3, 4, 5))
所以,第一步就像在另一个函数上应用map方法一样。
List(1, 2, 3, 2, 3, 4, 3, 4, 5)
第二步的工作方式类似于将flatten应用于第一步通过 map 方法获得的输出。
例子 :// Scala program of flatMap // Creating object object GfG { // Main method def main(args:Array[String]) { // Creating a sequence of numbers val seq = Seq(4, 5, 6, 7) // Applying flatMap on another // function val result = seq flatMap { s => Seq(s, s-1) } // Displays output println(result) } }
输出:List(4, 3, 5, 4, 6, 5, 7, 6)
在这里,也获得了输出,就像flatMap的第一个示例一样,具有其他功能。
- 在 if-else 语句中使用flatMap 。
例子 :// Scala program of flatMap // Creating object object GfG { // Main method def main(args:Array[String]) { // Creating a sequence of numbers val seq = Seq(8, 15, 22, 23, 24) // Applying flatMap on if-else // statement val result = seq flatMap { s => if (s % 3 == 0) Seq(s) else Seq(-s) } // Displays output println(result) } }
输出:List(-8, 15, -22, -23, 24)
在这里,如果给定序列的元素满足所述条件,则返回该元素,否则获得该元素的负数。