記事のディレクトリ
1.トラバース(foreachの)
方法
foreach(f: (A) ⇒ Unit): Unit
メソッド説明
foreachの | API | 説明 |
---|---|---|
パラメータ | F:(A)⇒ユニット | 関数オブジェクトを受け取る 入力パラメータのセットの要素に対して関数を、戻り値はヌルであります |
返却値 | 単位 | 空の |
サンプルコード
// 定义一个列表
val a = List(1,2,3,4)
//迭代打印
a.foreach((x:Int)=>println(x))
簡略化された関数定義を使用して、型推論
リストを反復処理するためのforeachを使用して、リスト内の各要素のタイプが決定されます
- Scalaは、自動的にパラメータセットの各要素の型を推論することができます
- あなたが関数を作成すると、そのパラメータリストを入力を省略することができます
サンプルコード
//定义一个列表
val a = List(1,2,3,4)
// 省略参数类型
a.foreach(x=>println(x))
アンダースコアの使用を簡素化するための関数の定義
- 関数のパラメータは、関数の本体内で一度だけ表示され、その関数が呼び出しをネストされていないときは、関数定義のアンダースコアを簡素化するために使用することができます
- メソッドのパラメータが関数である場合に表示さ下線場合、Scalaのコンパイラが自動的にコード関数にパッケージ化
- パラメータリストは、コンパイラのスカラ座で自動的に処理されます
サンプルコード
//定义一个列表
val a = List(1,2,3,4)
//使用下划线简化函数定义
a.foreach(println(_))
2.マッピング(地図)
計算されたデータが他のプロセスのデータ・タイプ、および一組の使用、したがってより多くのマッピング動作、1つのデータ型に変換されると
受信機能のマップ方法を、関数は、各要素、リターンに適用されます新しいリスト
方法
def map[B](f: (A) ⇒ B): TraversableOnce[B]
メソッド説明
マップ方法 | API | 説明 |
---|---|---|
ジェネリック | [B] | 最終マップ・メソッドが返すにジェネリックのコレクションを指定します。 |
パラメータ | F:(A)⇒B | 関数オブジェクト通過 (変換リスト要素へ)機能タイプAを受信し、タイプBの値を返します |
返却値 | TraversableOnce [B] | セットタイプB |
サンプルコード
//1. 创建一个列表,包含元素1,2,3,4
val a = List(1,2,3,4)
//2. 对List中的每一个元素加1
a.map(x=>x+1)
//3.使用下划线来定义函数,对List中的每一个元素加1
a.map(_ + 1)
平坦化3.マッピング(flatMap)
定義
缶flatMap、最初のマップとして理解し、平ら
- マップはのリストである変換素子一覧です
- 平坦化フラット全体リスト
方法
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): TraversableOnce[B]
メソッド説明
flatmap方法 | API | 説明 |
---|---|---|
ジェネリック | [B] | 要素型の最終セットを変換します |
パラメータ | f: (A) ⇒ GenTraversableOnce[B] | 传入一个函数对象 函数的参数是集合的元素 函数的返回值是一个集合 |
返回值 | TraversableOnce[B] | B类型的集合 |
代码示例
//一个文本中包含了若干行,创建一个列表保存这若干行
//"hadoop hive spark flink flume", "kudu hbase sqoop storm"
//获取到文本中每一行中的每一个单词,并将每一个单词都放到列表中
// 定义文本行列表
val a = List("hadoop hive spark flink flume", "kudu hbase sqoop storm")
//使用map将文本行转换为单词数组
a.map(x=>x.split(" "))
// 将数组中的扁平化
a.map(x=>x.split(" ")).flatten
使用flatMap简化操作
代码示例
// 定义文本行列表
val a = List("hadoop hive spark flink flume", "kudu hbase sqoop storm")
//获取到文本中每一行中的每一个单词,并将每一个单词都放到列表中
a.flatMap(_.split(" "))
4.过滤(filter)
过滤符合一定条件的元素
方法
def filter(p: (A) ⇒ Boolean): TraversableOnce[A]
方法说明
filter方法 | API | 说明 |
---|---|---|
参数 | p: (A) ⇒ Boolean | 传入一个函数对象 接收一个集合类型的参数 返回布尔类型,满足条件返回true, 不满足返回false |
返回值 | TraversableOnce[A] | 列表 |
代码示例
//1. 有一个数字列表,元素为:1,2,3,4,5,6,7,8,9
//过滤出所有的偶数
List(1,2,3,4,5,6,7,8,9).filter(_ % 2 == 0)
5.是否存在(exists)
方法
def exists(p: (A) ⇒ Boolean): Boolean
方法说明
对集合中的元素进行某个判断,其中之一符合条件则返回true,反之返回false
//1. 有一个数字列表,元素为:1,2,3,4,5,6,7,8,9
//判断这个数字列表是否有小于 1 的存在
List(1,2,3,4,5,6,7,8,9).exists(_ < 1)
//判断这个数字列表是否有大于 1 的存在
List(1,2,3,4,5,6,7,8,9).exists(_ > 5)
6.排序(sorted、sortBy、sortWith)
在scala集合中,可以使用以下几种方式来进行排序
- sorted默认排序
- sortBy指定字段排序
- sortWith自定义排序
默认排序(升序) (sorted)
代码示例
//1.定义一个列表,包含以下元素: 3, 1, 2, 9, 7
//2.对列表进行升序排序
List(3,1,2,9,7).sorted
指定字段排序 (sortBy)
根据传入的函数转换后,再进行排序
方法
def sortBy[B](f: (A) ⇒ B): List[A]
方法说明
sortBy方法 | API | 说明 |
---|---|---|
泛型 | [B] | 按照什么类型来进行排序 |
参数 | f: (A) ⇒ B | 传入函数对象 接收一个集合类型的元素参数 返回B类型的元素进行排序 |
返回值 | List[A] | 返回排序后的列表 |
代码示例
//1. 有一个列表,分别包含几行文本的内容:"01 hadoop", "02 flume", "03 hive", "04 spark"
//2. 请按照单词字母进行排序
val a = List("01 hadoop", "02 flume", "03 hive", "04 spark")
//按空格切分,以切分后的第二个元素进行排序
a.sortBy(_.split(" ")(1))
自定义排序 (sortWith)
自定义排序,根据一个函数来进行自定义排序
方法
def sortWith(lt: (A, A) ⇒ Boolean): List[A]
方法说明
sortWith方法 | API | 说明 |
---|---|---|
参数 | lt: (A, A) ⇒ Boolean | 传入一个比较大小的函数对象 接收两个集合类型的元素参数 返回两个元素大小,小于返回true,大于返回false |
返回值 | List[A] | 返回排序后的列表 |
代码示例
//1. 有一个列表,包含以下元素:2,3,1,6,4,5
val a = List(2,3,1,6,4,5)
//2. 使用sortWith对列表进行降序排序
a.sortWith((x,y) => if(x>y)true else false)
//函数参数只在函数中出现一次,可以使用下划线代替
a.sortWith(_ > _)
7.分组(groupBy)
我们如果要将数据按照分组来进行统计分析,就需要使用到分组方法
groupBy表示按照函数将列表分成不同的组
方法
def groupBy[K](f: (A) ⇒ K): Map[K, List[A]]
方法解析
groupBy方法 | API | 说明 |
---|---|---|
泛型 | [K] | タイプのグループ化フィールド |
パラメータ | F:(A)⇒K | 通過関数オブジェクト 受信したパラメータセット要素型 キーKの戻り型は、このキーは、グループ内の同じキーをグループ化するために使用されます |
返却値 | 地図[K、リスト[A]] | 戻り値のマッピング、Kは、データの対応するセットにこのパケットのパケットフィールド、リストフィールドであります |
サンプルコード
//有一个列表,包含了学生的姓名和性别(0代表男 1 代表女):
//"zhangsan","0" "lisi","1" "wangwu","0"
//请按照性别进行分组,统计不同性别的学生人数
//定义一个元组列表来保存学生姓名和性别
val a = List("zhangsan"-> "0", "lisi"->"1", "wangwu"->"0")
//按照性别进行分组
val b = a.groupBy(_._2)
// 将分组后的映射转换为性别/人数元组列表
b.map(x => x._1 -> x._2.size)
計算8.ポリマー(減らします)
重合操作、データのリストを1つに組み合わせることができます。このような動作は、しばしば統計的分析に使用され
、集計計算を通過させるための機能を示すリストを減らします
- 削減し、一貫性のある結果、左から右に示すReduceLeft
- reduceRight右から左への計算
方法
def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1
メソッド説明
メソッドを減らします | API | 説明 |
---|---|---|
ジェネリック | [A1>:A] | (下がバインド)要素型A1必見サブクラスのコレクションです |
パラメータ | :(A1、A1)⇒A1 | 着信機能オブジェクトのための連続重合操作 最初のタイプのパラメータA1:現在の変数の重合後に 第2のパラメータタイプA1:この要素が重合します |
返却値 | A1 | リスト要素の最終重合 |
サンプルコード
//定义一个列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
val a = List(1,2,3,4,5,6,7,8,9,10)
// 第一个下划线表示第一个参数,就是历史的聚合数据结果
// 第二个下划线表示第二个参数,就是当前要聚合的数据元素
//使用reduce计算所有元素的和
a.reduce(_ + _)
// 与reduce一样,从左往右计算
a.reduceLeft(_ + _)
// 从右往左聚合计算
a.reduceRight(_ + _)
9.フォールディング(折りたたみ)
倍と似減らすが、パラメータの指定された初期値以上
- 左から右にFoldLetと一貫性の倍の効果は、計算を表し、
- 右から左に計算することはfoldRightを示し、
方法
def fold[A1 >: A](z: A1)(op: (A1, A1) ⇒ A1): A1
メソッド説明
メソッドを減らします | API | 説明 |
---|---|---|
ジェネリック | [A1>:A] | (下がバインド)要素型A1必見サブクラスのコレクションです |
パラメータ1 | Z:A1 | 初期値 |
パラメータ2 | :(A1、A1)⇒A1 | 折り畳みの連続運転のためのオブジェクトは、関数に渡される 最初のパラメータはタイプA1である:現在の変数は、折り畳まれた 第二のタイプA1パラメータ:現在の要素を折り畳まれます |
返却値 | A1 | 最終的なリストは、折りたたまれた要素であり、 |
サンプルコード
//定义一个列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
val a = List(1,2,3,4,5,6,7,8,9,10)
//使用fold方法计算所有元素的和
a.fold(0)(_ + _)
a.foldLeft(0)(_ + _)
a.foldRight(0)(_ + _)