日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

發布時間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • I . List 集合高階函數引入
        • II . Kotlin 數據類 ( data class )
        • III . Java 代碼 與 Kotlin 代碼實現對比 ( 查詢年齡最大的 )
        • IV . maxBy 高階函數
        • V . minBy 高階函數
        • VI . filter 高階函數
        • VII . map 高階函數
        • VIII . any 高階函數
        • IX . count 高階函數
        • X . find 高階函數
        • XI . Kotlin 語言集合中的高階函數 代碼示例



I . List 集合高階函數引入



1 . 高階函數 : 函數的 參數 或 返回值類型 是 函數類型 的 函數 , 是高階函數 ;


2 . List 集合中定義的高階函數 : List 集合中使用了大量的高階函數 , 如 maxBy , filter , map , any , count , find , groupBy 等函數 , 這些函數的參數都是 函數類型的 , 需要傳入一個函數類型實例作為其參數 ;



II . Kotlin 數據類 ( data class )



1 . 數據類介紹 : Kotlin 中 data class 類能快速幫助開發者封裝 各種類型的數據 , 編譯后生成的 JavaBean 只生成最基本的幾個函數 , 如 hashCode() , toString() , copy() 等 ;


2 . 數據類型 ( data class ) 定義 :


① 參數格式 : 定義數據類時需要將要封裝的字段寫在構造函數中 , 格式如下 :

var / val 變量名 : 變量類型

② 參數要求 : 構造函數必有 >= 1 個參數 , 參數格式必須按照上述格式聲明 ;

③ 修飾 : data class 不能被 abstract / inner / open / sealed 修飾 ;

④ 繼承關系 : data class 可以實現接口 , 在 1.1 版本后 , 可以繼承 ;


3 . Kotlin 數據類 功能 :


① 變量相關 : 自動生成成員變量 , 及對應的 getter 和 setter 方法 ;

③ 基本方法 : 自動生成 equals() , hashCode() , toString() , componentN() , copy() 等方法 ;


4 . Kotlin 數據類 實例 :

data class Student(var name : String, var age : Int, var height : Int)

5 . JavaBean 參考 : 上面定義的 Kotlin 數據類 , 與下面的 JavaBean 基本一致 , 實現的那一串方法就算了 ;

public class Student {private String name;private int age;private int height;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;} }

這個數據類節省了很多行代碼 ;



III . Java 代碼 與 Kotlin 代碼實現對比 ( 查詢年齡最大的 )



1 . 聲明 List 集合 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )

2 . 按照 Java 代碼的邏輯實現找找年齡最大的學生 : 先找出最大年齡 , 然后遍歷找出最大年齡的學生 ;

/*** 篩選出 students 中 18 歲的學生 , 并打印出來** 這是按照 Java 代碼的邏輯寫的*/ fun filterByAge(age : Int){// 1 . 先創建一個集合var filterStudents : ArrayList<Student> = ArrayList<Student>()// 2 . 遍歷 students 集合 , 并將 18 歲的篩選出來for (student in students){if(student.age == age){filterStudents.add(student);}}// 3 . 打印篩選出的學生for(student in filterStudents){println("${student.name} , ${student.age} , ${student.height}")}}

3 . 使用 maxBy 高階函數實現同樣的功能 : 代碼要比上面精簡很多 , 因此在 Kotlin 中使用高階函數 , 能極大提高開發效率 ;

// 獲取年齡最大的學生 var maxAgeStudent = students.maxBy { it.age } println(maxAgeStudent)

IV . maxBy 高階函數



maxBy 函數原型 : 獲取集合中某個元素的某個字段最大值的元素 , 如果有多個最大值元素 , 那么返回第一個 ;

/*** Returns the first element yielding the largest value of the given function or `null` if there are no elements.* * @sample samples.collections.Collections.Aggregates.maxBy*/ public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {val iterator = iterator()if (!iterator.hasNext()) return nullvar maxElem = iterator.next()if (!iterator.hasNext()) return maxElemvar maxValue = selector(maxElem)do {val e = iterator.next()val v = selector(e)if (maxValue < v) {maxElem = emaxValue = v}} while (iterator.hasNext())return maxElem }

2 . maxBy 函數的幾個要素 :

Iterable<T>.maxBy(selector: (T) -> R): T?

① 函數調用者 : maxBy 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : selector: (T) -> R 是函數參數 ;

③ 函數返回值 : 返回值是 T? 類型 , 后面的 ? 表示返回值不為空 ; T 類型是一個泛型 , 是集合中元素的類型 ;


3 . maxBy 參數解析 : selector: (T) -> R , 這是一個函數類型參數 ; selector 是 選擇器 含義 ;


① selector : 函數類型變量名 ;

② (T) -> R 是函數參數類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 R 類型 , 表示 T 類型的某個字段 ;


4 . maxBy 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 selector: (T) -> R , 該函數類型變量通過 selector(T) 進行調用 , 在 maxBy 中通過該函數類型變量 , 調用該變量對應的函數 , 實現了獲取 T 對象某個字段最大值元素的功能 ;


5 . maxBy 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...// 獲取年齡最大的學生 var maxAgeStudent = students.maxBy { it.age } println(maxAgeStudent)

② 執行結果 :

Student(name=Jack, age=29, height=165)

V . minBy 高階函數



minBy 與 maxBy 基本類似 , maxBy 是獲取元素某字段最大值的第一個元素 , minBy 是獲取元素某字段最小值的第一個元素


minBy 函數原型 : 獲取集合中某個元素的某個字段最小值的元素 , 如果有多個最小值元素 , 那么返回第一個 ;

/*** Returns the first element yielding the smallest value of the given function or `null` if there are no elements.* * @sample samples.collections.Collections.Aggregates.minBy*/ public inline fun <T, R : Comparable<R>> Iterable<T>.minBy(selector: (T) -> R): T? {val iterator = iterator()if (!iterator.hasNext()) return nullvar minElem = iterator.next()if (!iterator.hasNext()) return minElemvar minValue = selector(minElem)do {val e = iterator.next()val v = selector(e)if (minValue > v) {minElem = eminValue = v}} while (iterator.hasNext())return minElem }

2 . minBy 函數的幾個要素 :

Iterable<T>.minBy(selector: (T) -> R): T?

① 函數調用者 : minBy 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : selector: (T) -> R 是函數參數 ;

③ 函數返回值 : 返回值是 T? 類型 , 后面的 ? 表示返回值不為空 ; T 類型是一個泛型 , 是集合中元素的類型 ;


3 . minBy 參數解析 : selector: (T) -> R , 這是一個函數類型參數 ; selector 是 選擇器 含義 ;


① selector : 函數類型變量名 ;

② (T) -> R 是函數參數類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 R 類型 , 表示 T 類型的某個字段 ;


4 . minBy 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 selector: (T) -> R , 該函數類型變量通過 selector(T) 進行調用 , 在 minBy 中通過該函數類型變量 , 調用該變量對應的函數 , 實現了獲取 T 對象某個字段最小值元素的功能 ;


5 . minBy 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...// 獲取身高最低的學生 var minHeightStudent = students.minBy { it.height } println(minHeightStudent)

② 執行結果 :

Student(name=Jerry, age=18, height=165)

VI . filter 高階函數



filter 函數原型 : 返回 List 集合 , 該集合中的元素全部符合傳入的 predicate: (T) -> Boolean 類型函數要求 , 即執行該 (T) -> Boolean 類型函數 , 傳入 T 元素對象 , 返回值為 true ; 傳入一個函數 , 該函數判定集合中的每個元素是否符合某種要求 ;

/*** Returns a list containing only elements matching the given [predicate].*/ public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {return filterTo(ArrayList<T>(), predicate) }

2 . filter 函數的幾個要素 :

Iterable<T>.filter(predicate: (T) -> Boolean): List<T>

① 函數調用者 : filter 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : predicate: (T) -> Boolean 是函數參數 ;

③ 函數返回值 : 返回值是 List 類型 , 是一個 泛型為 T 類型的 List 集合 ;


3 . filter 參數解析 : predicate: (T) -> Boolean , 這是一個函數類型參數 ; predicate 是 謂詞 含義;


① predicate : 函數類型變量名 ;

② (T) -> Boolean 是函數參數的類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 Boolean 類型 , 表示 T 類型是否符合某種要求 , 符合該要求才會將該元素放到 filter 方法返回值集合中 ;


4 . filter 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 predicate: (T) -> Boolean , 該函數類型變量通過 predicate(T) 進行調用 , 執行該函數返回 true 的元素 , 會被放到 filter 方法返回值集合中 ;


5 . filter 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...// 篩選出年齡大于 15 , 并且身高小于 180 的學生 , 其返回值是一個集合 // 后面可以有多個 and 連接多個判斷語句 var ageH15HeightLow180 = students.filter {(it.age > 15 ) and (it.height < 180) } println(ageH15HeightLow180)

② 執行結果 :

[Student(name=Jerry, age=18, height=165), Student(name=Trump, age=18, height=178), Student(name=Jack, age=29, height=165)]

VII . map 高階函數



map 函數原型 : 返回 List<R> 集合 , 該集合中的元素的類型是一個生成的新類型 , 該類型是根據原來的集合 List<T> 元素進行轉換映射成的新類型 ; 傳入一個函數 , 該函數將集合中的每個元素進行某種轉換 , 產生一個新類型元素 ;

/*** Returns a list containing the results of applying the given [transform] function* to each element in the original collection.* * @sample samples.collections.Collections.Transformations.map*/ public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform) }

2 . map 函數的幾個要素 :

Iterable<T>.map(transform: (T) -> R): List<R>

① 函數調用者 : map 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : transform: (T) -> R 是函數參數 ;

③ 函數返回值 : 返回值是 List 類型 , 是一個 泛型為 R 類型的 List 集合 ; 該 R 類型是生成的新類型 ;


3 . map 參數解析 : transform: (T) -> R , 這是一個函數類型參數 ; transform 有 轉換變換 含義;


① transform : 函數類型變量名 ;

② (T) -> R 是函數參數的類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 R 類型 , 將 T 類型元素轉換成 R 類型 ;


4 . map 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 transform: (T) -> R , 該函數類型變量通過 transform(T) 進行調用 , 執行該函數返回 R 類型元素 , map 的返回值就是這些 R 類型元素的 List<R> 集合 ;


5 . map 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...//將 Student 對象中的 姓名 和 年齡抽取出來 , 拼接成 "姓名 : 年齡" 字符串, 放到一個新的 字符串集合中 var studentNameAgess = students.map {"${it.name} : ${it.age}" } println(studentNameAgess)

② 執行結果 :

[Tom : 12, Jerry : 18, Trump : 18, Jack : 29]

VIII . any 高階函數



any 函數原型 : 返回該集合中是否存在某個元素 ; 傳入一個函數 , 該函數判定集合中的每個元素是否符合某種要求 ;

/*** Returns `true` if at least one element matches the given [predicate].* * @sample samples.collections.Collections.Aggregates.anyWithPredicate*/ public inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean {if (this is Collection && isEmpty()) return falsefor (element in this) if (predicate(element)) return truereturn false }

2 . any 函數的幾個要素 :

Iterable<T>.any(predicate: (T) -> Boolean): Boolean

① 函數調用者 : any 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : predicate: (T) -> Boolean 是函數參數 ;

③ 函數返回值 : 返回值是 Boolean 類型 , 該集合中如果存在符合某種條件的元素 , 返回 true , 否則返回 false ;


3 . any 函數類型參數解析 : predicate: (T) -> Boolean , 這是一個函數類型參數 ; predicate有 謂詞 含義;


① predicate: 函數類型變量名 ;

② (T) -> Boolean 是函數參數的類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 Boolean 類型 , 函數的執行內容 : 如果 T 類型參數符合函數中的要求 , 返回 true , 反之返回 false ;


4 . any 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 predicate: (T) -> Boolean , 該函數類型變量通過 predicate(T) 進行調用 , 執行該函數返回 Boolean 值 , 表示該 T 類型對象是否符合函數中的要求 ;


5 . any 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...//集合中是否有 18 歲的學生 var is18AgeExist : Boolean = students.any{it.age == 18 } println(is18AgeExist)

② 執行結果 :

true

IX . count 高階函數



count 函數原型 : 返回該集合中符合給定謂詞要求的元素個數 ; 傳入一個函數 , 該函數用于判定元素是否符合要求;

/*** Returns the number of elements matching the given [predicate].*/ public inline fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int {if (this is Collection && isEmpty()) return 0var count = 0for (element in this) if (predicate(element)) checkCountOverflow(++count)return count }

2 . count 函數的幾個要素 :

Iterable<T>.count(predicate: (T) -> Boolean): Int

① 函數調用者 : count 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : predicate: (T) -> Boolean 是函數參數 ;

③ 函數返回值 : 返回值是 Boolean 類型 , 該集合中如果存在符合某種條件的元素 , 返回 true , 否則返回 false ;


3 . count 函數類型參數解析 : predicate: (T) -> Boolean , 這是一個函數類型參數 ; predicate有 謂詞 含義;


① predicate: 函數類型變量名 ;

② (T) -> Boolean 是函數參數的類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 Boolean 類型 , 函數的執行內容 : 如果 T 類型參數符合函數中的要求 , 返回 true , 反之返回 false ;


4 . count 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 predicate: (T) -> Boolean , 該函數類型變量通過 predicate(T) 進行調用 , 執行該函數返回 Boolean 值 , 表示該 T 類型對象是否符合函數中的要求 ;


5 . count 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...//查找年齡小于 19 歲的學生個數 var ageLess19 : Int = students.count {it.age < 19 } println(ageLess19)

② 執行結果 :

3

X . find 高階函數



find 函數原型 : 返回該集合中符合給定謂詞要求的第一個元素 ;

/*** Returns the first element matching the given [predicate], or `null` if no such element was found.*/ @kotlin.internal.InlineOnly public inline fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T? {return firstOrNull(predicate) }

2 . find 函數的幾個要素 :

Iterable<T>.find(predicate: (T) -> Boolean): T?

① 函數調用者 : find 函數是被 Iterable<T> 對象調用的 , 該對象是一個集合 ;

② 函數的參數 : predicate: (T) -> Boolean 是函數參數 ;

③ 函數返回值 : 返回值是 T 類型 , 該集合中如果存在符合某種條件的元素 , 返回第一個該元素 , 使用 ? 修飾說明該值不能為空 ;


3 . find 函數類型參數解析 : predicate: (T) -> Boolean , 這是一個函數類型參數 ; predicate有 謂詞 含義;


① predicate: 函數類型變量名 ;

② (T) -> Boolean 是函數參數的類型 : 該函數類型的參數是 T 類型 , T 是集合元素類型 ; 返回值是 Boolean 類型 , 函數的執行內容 : 如果 T 類型參數符合函數中的要求 , 返回 true , 反之返回 false ;


4 . find 高階函數對函數類型參數的使用 : 傳入一個函數類型變量 predicate: (T) -> Boolean , 該函數類型變量通過 predicate(T) 進行調用 , 執行該函數返回 Boolean 值 , 表示該 T 類型對象是否符合函數中的要求 ;


5 . find 高階函數示例 :


① 代碼示例 :

data class Student(var name : String, var age : Int, var height : Int)var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )//...//查找第一個年齡 18 歲的學生 var first18Student = students.find {it.age == 18 } println(first18Student)

② 執行結果 :

Student(name=Jerry, age=18, height=165)

XI . Kotlin 語言集合中的高階函數 代碼示例



1 . 代碼示例 :

package list/*** data class 類能快速幫助開發者封裝 各種類型的數據 ,* 編譯后生成的 JavaBean 只生成最基本的幾個函數 ,* 如 hashCode() , toString() , copy() 等** 定義時需要將 要封裝的字段寫在構造函數中 , 格式如下* var / val 變量名 : 變量類型** 參數要求 : 構造函數必有 >= 1 個參數 , 參數格式必須按照上述格式聲明* 修飾 : data class 不能被 abstract / inner / open / sealed 修飾* 繼承關系 : data class 可以實現接口 , 在 1.1 版本后 , 可以繼承*/ data class Student(var name : String, var age : Int, var height : Int)/*** 聲明 List 集合 , 其中有兩個 Student 對象*/ var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165) )fun main() {//篩選出 students 中 18 歲的學生 , 并打印出來filterByAge(18);/*如果有很多類型的篩選 , 需要些好很多 filterBy 方法 ;如按照身高篩選 , 按照名字篩選 , 按照年齡篩選每種類型都要寫一種方法 , 非常繁瑣開發時間長了 , 很難維護解決上述問題的方案 :行為參數化 : 將篩選操作封裝在函數中 , 將該函數傳遞給過濾器高階函數 : 使用函數類型作為 參數 或 返回值 的函數 , 是高階函數下面的示例就是使用高階函數解決上述問題 :*//*List 高級函數 :maxBy minBy 高階函數 :選出年齡最大的學生Java 語言邏輯 : 首先要遍歷集合獲取最大的年齡 , 然后逐個遍歷查找年齡最大的的學生調用 集合的 maxBy 方法 , 即可獲取值最大的元素 , 并且添加到返回的子集合中*** Returns the first element yielding the largest value of the given function or `null` if there are no elements.** @sample samples.collections.Collections.Aggregates.maxBy*public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {val iterator = iterator()if (!iterator.hasNext()) return nullvar maxElem = iterator.next()if (!iterator.hasNext()) return maxElemvar maxValue = selector(maxElem)do {val e = iterator.next()val v = selector(e)if (maxValue < v) {maxElem = emaxValue = v}} while (iterator.hasNext())return maxElem}maxBy 函數需要傳入 selector: (T) -> R 參數 , 這是一個函數類型參數 ,selector 是變量名 ,(T) -> R 是函數類型 :T 是迭代器類型 , Iterable<T> , 代表 Student 學生類型R 是返回值類型maxBy 和 minBy 都是返回 集合中的 最大 或 最小 的第一個元素filter 高階函數 :*** Returns a list containing only elements matching the given [predicate].*public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {return filterTo(ArrayList<T>(), predicate)}filter 是查找特定條件的元素filter 函數接收參數 predicate: (T) -> Booleanpredicate 是函數類型變量名(T) -> Boolean 是函數類型 , 其參數是元素類型對象 , 即 Student 對象 , 返回值是布爾值map 高階函數 :作用 : 將某個屬性映射成新的集合 , 如將學生的 年齡 放到一個新的 Int 集合中 , 名字放到新的 String 集合中map 接收 transform: (T) -> R 參數 :transform 是函數類型變量名(T) -> R 是函數類型 , T 類型是參數類型 , R 類型是返回值類型 ,在 map 函數中 , 創建了一個 R 類型的集合 , 并根據 傳入的 T 類型元素生成 R 類型元素 , 將 R 類型元素放到對應集合中*** Returns a list containing the results of applying the given [transform] function* to each element in the original collection.** @sample samples.collections.Collections.Transformations.map*public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)}any 高階函數傳入 predicate: (T) -> Boolean 參數參數類型是 (T) -> Boolean 函數類型 , 函數類型中的參數是 T 元素類型 , 返回值是 布爾值獲取集合中是否有符合某種條件的元素*** Returns `true` if at least one element matches the given [predicate].** @sample samples.collections.Collections.Aggregates.anyWithPredicate*public inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean {if (this is Collection && isEmpty()) return falsefor (element in this) if (predicate(element)) return truereturn false}count 高階函數 : 統計符合條件元素的個數count 方法傳入的函數類型 predicate: (T) -> Booleanpredicate: (T) -> Boolean 函數類型函數類型實例名稱 : predicate參數 : predicate: (T) -> Boolean返回值 : Boolean 布爾值count 方法返回值 : Int 類型 , 返回符合 predicate: (T) -> Boolean 函數類型實例執行返回 true 的元素個數public inline fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int {if (this is Collection && isEmpty()) return 0var count = 0for (element in this) if (predicate(element)) checkCountOverflow(++count)return count}find 高階函數 : 查找第一個符合條件的元素find 函數參數 : predicate: (T) -> Boolean 函數類型變量find 函數返回值 : T 類型的元素對象 , 返回符合 傳入的函數變量執行返回 true 的元素集合的第一個元素predicate: (T) -> Boolean 函數類型 :public inline fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T? {return firstOrNull(predicate)}groupBy 高階函數 : 將元素分組*/// 獲取年齡最大的學生var maxAgeStudent = students.maxBy { it.age }println(maxAgeStudent)// 獲取身高最低的學生var minHeightStudent = students.minBy { it.height }println(minHeightStudent)// 篩選出年齡大于 15 , 并且身高小于 180 的學生 , 其返回值是一個集合// 后面可以有多個 and 連接多個判斷語句var ageH15HeightLow180 = students.filter {(it.age > 15 ) and (it.height < 180)}println(ageH15HeightLow180)//將 Student 對象中的 姓名 和 年齡抽取出來 , 拼接成 "姓名 : 年齡" 字符串, 放到一個新的 字符串集合中var studentNameAgess = students.map {"${it.name} : ${it.age}"}println(studentNameAgess)//集合中是否有 18 歲的學生var is18AgeExist : Boolean = students.any{it.age == 18}println(is18AgeExist)//查找年齡小于 19 歲的學生個數var ageLess19 : Int = students.count {it.age < 19}println(ageLess19)//查找第一個年齡 18 歲的學生var first18Student = students.find {it.age == 18}println(first18Student)//按照年齡分組 , 結果是 map 集合var groupAgeResult = students.groupBy { it.age }println(groupAgeResult)//按照身高分組 , 結果是 map 集合 , 獲取 165 身高的學生 , 并且遍歷打印出來students.groupBy { it.height }.get(165)?.forEach { println(it) }}/*** 篩選出 students 中 18 歲的學生 , 并打印出來** 這是按照 Java 代碼的邏輯寫的*/ fun filterByAge(age : Int){// 1 . 先創建一個集合var filterStudents : ArrayList<Student> = ArrayList<Student>()// 2 . 遍歷 students 集合 , 并將 18 歲的篩選出來for (student in students){if(student.age == age){filterStudents.add(student);}}// 3 . 打印篩選出的學生for(student in filterStudents){println("${student.name} , ${student.age} , ${student.height}")}}

2 . 執行結果 :

Jerry , 18 , 165 Trump , 18 , 178 Student(name=Jack, age=29, height=165) Student(name=Jerry, age=18, height=165) [Student(name=Jerry, age=18, height=165), Student(name=Trump, age=18, height=178), Student(name=Jack, age=29, height=165)] [Tom : 12, Jerry : 18, Trump : 18, Jack : 29] true 3 Student(name=Jerry, age=18, height=165) {12=[Student(name=Tom, age=12, height=190)], 18=[Student(name=Jerry, age=18, height=165), Student(name=Trump, age=18, height=178)], 29=[Student(name=Jack, age=29, height=165)]} Student(name=Jerry, age=18, height=165) Student(name=Jack, age=29, height=165) 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品久久久av | 非洲黄色大片 | 深爱激情综合 | 黄色免费网站观看 | 红桃视频隐藏入口 | 日韩a√ | 麻豆成人久久精品一区二区三区 | 日本丰满少妇 | 国产成人精品一区二三区四区五区 | 欧美精品久久久久性色 | 射射综合网 | 善良的公与媳hd中文字 | 久久综合网址 | 黄色大片视频 | 永久在线 | 国产精品电影一区 | 非洲黑人狂躁日本妞 | 亚洲欧美日韩精品永久在线 | 青娱乐在线免费视频 | jjzz日本视频 | 国产成人综合自拍 | 超碰在线中文字幕 | 欧美精产国品一二三区 | 黄色污污视频软件 | 国产吞精囗交免费视频 | 天堂√在线 | 毛片小视频 | 国产艳俗歌舞表演hd | 人人妻人人澡人人爽欧美一区双 | 欧美亚洲高清 | 神马午夜激情 | 国产精品--色哟哟 | 5d肉蒲团之性战奶水 | jizz性欧美17| 嫩草影院在线观看视频 | 精品亚洲精品 | 日韩精品一二三四 | 91无限观看 | 日韩精品视频免费看 | 久久久久久久久久99精品 | 91亚洲精品久久久蜜桃借种 | 国产成人亚洲一区二区 | 黄色爱爱视频 | www国产在线 | 久久网亚洲 | 91av手机在线 | 九九九在线 | xx久久 | 91片看| 色久综合网 | wwwxxxx国产 | 国产三级精品三级在线 | 深夜视频在线 | 午夜激情视频在线观看 | 在线国产黄色 | 日本一区二区三区视频在线观看 | 一级片一区 | 国产美女网站视频 | 久久久久久香蕉 | 色综合久久综合 | 久久96| 狠狠爱亚洲 | 国产哺乳奶水91在线播放 | 色一情一乱一区二区三区 | 在线免费观看视频网站 | 精品在线一区 | 黄色小视频免费看 | 激情青青草| 欧美aa大片 | 日韩有码第一页 | 日本精品视频 | 夜夜草av | 97超碰免费在线观看 | 无人在线观看高清视频 单曲 | 国产露脸国语对白在线 | 99热这里只有精品99 | 免费人成在线观看网站 | 超碰在线免费公开 | 日韩av有码 | 国产精品国产三级国产传播 | 337p亚洲精品色噜噜狠狠 | 欧美韩国日本在线 | 国产熟妇搡bbbb搡bbbb搡 | 日本草逼视频 | 91片黄在线观看 | 欧美做受xxxxxⅹ性视频 | 秋葵视频污 | 欧美黑人欧美精品刺激 | 黄色天堂 | 久久久久久久九九九九 | 国产aa大片 | 成人午夜视频在线 | 国产小视频一区 | а√天堂8资源在线官网 | 亚洲激情成人网 | 911国产在线| 精品动漫一区二区三区的观看方式 | 一级黄色片免费观看 | 91精产国品|