Programación funcional Scala (1)

Introducción: En el campo del big data, una gran cantidad de códigos comerciales de Spark / Flink utilizarán programación funcional, ¡así que esta parte es muy importante!

  • Solo los siguientes métodos ~~~~
  1. Para cada
  2. Mapa
  3. Mapa plano
  4. Filtrar
  5. ¿Existe (existe)
  6. 排序 (sorted 、 sortBy 、 sortWith)
  7. Agrupación (groupBy)
  8. Cálculo agregado (reducir)
  9. Doblez

Explicación: en Scala, _ es un comodín

1. Atravesar cada uno

  • La programación funcional de Scala utiliza el método foreach para recorrer e iterar . Puede hacer que el código sea más conciso.
方法:
集合对象.foreach(f: (A)Unit): Unit

例子:
// 定义一个列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)// 迭代打印
scala> a.foreach((x:Int)=>println(x))  //复杂了

//优化 省略参数
scala> a.foreach(x => println(x))
18000
20000
22000

//在优化 下划线代替(用的很多)
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义
scala> a.foreach(println(_))
18000
20000
22000

proceso:
Inserte la descripción de la imagen aquí

2. Mapa

Introducción: esta parte es la más utilizada para big data, por lo que debes dominarla

  • El método del mapa recibe una función, aplica esta función a cada elemento y devuelve una nueva colección
    Inserte la descripción de la imagen aquí
用法:
def map[B](f: (A) ⇒ B): TraversableOnce[B]

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

例子    将List列表中的全部 +1:
scala> val a = List(1,2,3,4)    //定义一个列表
a: List[Int] = List(1, 2, 3, 4)

//方法1
scala> a.map(x => x+1)   //全部+1
res34: List[Int] = List(2, 3, 4, 5)//方法2   参数就一个  _ 代替  用的多
scala> a.map(_ + 1)

3. Mapeo plano | flatMap (también se usa mucho)

  • flatMap se puede entender como mapa primero, luego aplanar
  • map es convertir los elementos de la lista en una matriz
  • aplanar y toda la lista se aplana
    Inserte la descripción de la imagen aquí
方法签名
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): TraversableOnce[B]

Inserte la descripción de la imagen aquí

ejemplo:
Inserte la descripción de la imagen aquí

例子: 
1.有一个包含了若干个文本行的列表:"hadoop hive spark flink flume", "kudu hbase sqoop storm"
2.获取到文本行中的每一个单词,并将每一个单词都放到列表中

步骤
1.使用map将文本行拆分成数组
2.再对数组进行扁平化
3.使用flatMap简化操作

// 定义文本行列表
scala> val a = List("hadoop hive spark flink flume", "kudu hbase sqoop storm")
a: List[String] = List(hadoop hive spark flink flume, kudu hbase sqoop storm)// 使用map将文本行转换为单词数组
scala> a.map(x=>x.split(" "))
res5: List[Array[String]] = List(Array(hadoop, hive, spark, flink, flume), Array(kudu, hbase, sqoop, storm))// 扁平化,将数组中的
scala> a.map(x=>x.split(" ")).flatten
res6: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)

// 使用flatMap简化操作   用的最多  _ 通配符代替参数
scala> a.flatMap(_.split(" "))
res7: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)

4. Filtrar | filtrar

  • Elementos filtrantes que cumplen determinadas condiciones
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
例子: 过滤掉奇数
scala> List(1,2,3,4,6,5,7,89,78,5,66,55).filter(_ % 2 == 0)
res39: List[Int] = List(2, 4, 6, 78, 66)

Supongo que te gusta

Origin blog.csdn.net/m0_49834705/article/details/112687370
Recomendado
Clasificación