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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Kotlin实战指南八:高阶函数

發(fā)布時間:2024/9/30 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin实战指南八:高阶函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載請標明出處:https://blog.csdn.net/zhaoyanjun6/article/details/87969098
本文出自【趙彥軍的博客】


高階函數(shù)

    • any
    • all
    • count
    • none
    • max
    • min
    • sum
    • forEachIndexed
    • drop 從前面丟棄元素
    • dropLast 從后面丟棄元素
    • groupBy 分組
    • filter
    • filterNot
      • 例子1:操作List
      • 例子2:操作Map
    • 更多操作 filterKeys、filterValues
    • take、takeLast
    • sortedBy 排序
    • map 數(shù)據(jù)結(jié)構(gòu)變化
    • 常用操作符
      • 下標操作類
      • 判斷類
      • 過濾類
      • 轉(zhuǎn)換類
      • 排序類

any

any 只要有一個符合就返回true

val list = listOf<Int>(1,2,3,4,5,6)//只要list 中有一個是大于3就返回true val any= list.any { it>3 }

all

all 所有條件符合才返回true

val list = listOf<Int>(1,2,3,4,5,6)// list 中所有元素大于3就返回true val any= list.all { it>3 }

count

count 返回符合條件的數(shù)目

val list = listOf<Int>(1,2,3,4,5,6)var any = list.count { it > 5 }

none

none 如果沒有任何元素與給定的函數(shù)匹配,則返回true

val list = listOf<Int>(1,2,3,4,5,6)var any = list.none { it > 5 }

max

max 返回最大的值,如果沒有則返回null ,min同理

val list = listOf<Int>(1,2,3,4,5,6) var result = list.max()

min

min 返回最小的值,如果沒有則返回null

val list = listOf<Int>(1,2,3,4,5,6) var result = list.min()

sum

sum 返回數(shù)據(jù)相加總數(shù)

val list = listOf<Int>(1,2,3,4,5,6) var result = list.sum()

forEachIndexed

forEachIndexed 與foreach相同,但是可以得到index

drop 從前面丟棄元素

val list = listOf<Int>(1,2,3,4,5,6) var result = list.drop(2) //丟棄前兩個元素,結(jié)果為:[3, 4, 5, 6]

dropLast 從后面丟棄元素

val list = listOf<Int>(1,2,3,4,5,6) var result = list.dropLast(2) //丟棄后兩個元素,結(jié)果為:[1,2,3, 4]

groupBy 分組

groupBy 根據(jù)函數(shù)將集合分組,返回map類型對象

val list = listOf<Int>(1,2,3,4,5,6,7,8,9,10)//把 list 分為偶數(shù)和奇數(shù) var result = list.groupBy { it % 2 == 0} Log.e("zhaoyanjun:", "" + result)

結(jié)果:返回的是 map 對象

{false=[1, 3, 5, 7, 9], true=[2, 4, 6, 8, 10]}

filter

過濾list,符合過濾條件的就是過濾結(jié)果

var list = mutableListOf(1, 2, 3, 4)var list2 = list.filter { it ->it > 2 }

或者可以更短:

var list = mutableListOf(1, 2, 3, 4)var list2 = list.filter { it > 2 }

list2的結(jié)果是:

[3,4]

filterNot

把符合條件的過濾掉,剩下的是結(jié)果。這個操作和 filter 相反。

例子1:操作List

var list = mutableListOf<Int>(1, 2, 3) var list2 = list.filterNot { it > 2}

list2結(jié)果是:

[1,2]

例子2:操作Map

var map = mutableMapOf<Int, String>() map.put(0, "a") map.put(1, "b") map.put(2, "c")var map2 = map.filterNot { it.key ==2 }

map2的結(jié)果是:

{0=a, 1=b}

更多操作 filterKeys、filterValues

var map = mutableMapOf<Int, String>()var map2 = map.filterKeys { it == 3 } //過濾key val map3 = map.filterValues { it == "a" } //過濾 value

take、takeLast

take是從集合中取前幾個元素
takeLast是從集合中取后幾個元素

val list = mutableListOf<Int>(1,2,3,4)var list2 = list.take(3) //結(jié)果:[1, 2, 3] var list3 = list.takeLast(2) //結(jié)果:[2, 3, 4]

sortedBy 排序

在 java 中,我們要對一個list排序,需要寫很多代碼,但是在 kotlin 中,就簡單很多了。

首先我們定義一個 User 類,這個類只有兩個字段,分別是 id,name ,代碼如下:

class User(var id: Int, var name: String) //定義三個 User 變量 var u1 = User(1,"張三") var u2 = User(3,"李四") var u3 = User(2,"王五")//用list把三個變量裝起來 var list = listOf<User>(u1,u2,u3)//對 id 字段進行排序,并把排序的結(jié)果賦值給 list2 var list2 = list.sortedBy { it.id }//輸出list2 list2.forEach {Log.e("zhaoyanjun:", ""+ it.id + "" + it.name) }

結(jié)果如下:

com.kotlin E/zhaoyanjun:: 1張三 com.kotlin E/zhaoyanjun:: 2王五 com.kotlin E/zhaoyanjun:: 3李四

需要注意的是:

1、使用 list.sortedBy 對 list 排序,但是 list 的順序并沒有發(fā)生就改變,還是原來的順序。
2、sortedBy()方法為順序排序,如果想要逆序排序,可以使用 sortedByDescending() 方法。

map 數(shù)據(jù)結(jié)構(gòu)變化

我們現(xiàn)在有一個需求,需要把所有的用戶的用戶名存在一個 list 里面,就可以用 map 操作符。

var listName = list.map { it.name }Log.e("zhaoyanjun:", "" + listName)

輸出結(jié)果:

[張三, 李四, 王五]

除此之外,還可以連續(xù)操作。比如,我們把用戶名字中最后一個取出來。

var listName = list.map { it.name }.takeLast(1)Log.e("zhaoyanjun:", "" + listName)

輸出結(jié)果:

[王五]

常用操作符

Kotlin 的操作符跟 RxJava 基本一致,不需要額外記憶。

下標操作類

  • contains —— 判斷是否有指定元素
  • elementAt —— 返回對應(yīng)的元素,越界會拋IndexOutOfBoundsException
  • firstOrNull —— 返回符合條件的第一個元素,沒有 返回null
  • lastOrNull —— 返回符合條件的最后一個元素,沒有 返回null
  • indexOf —— 返回指定元素的下標,沒有 返回-1
  • singleOrNull —— 返回符合條件的單個元素,如有沒有符合或超過一個,返回null

判斷類

  • any —— 判斷集合中 是否有滿足條件 的元素
  • all —— 判斷集合中的元素 是否都滿足條件
  • none —— 判斷集合中是否 都不滿足條件,是則返回true
  • count —— 查詢集合中 滿足條件 的 元素個數(shù)
  • reduce —— 從 第一項到最后一項進行累計

過濾類

  • filter —— 過濾 掉所有 滿足條件 的元素
  • filterNot —— 過濾所有不滿足條件的元素
  • filterNotNull —— 過濾NULL
  • take —— 返回前 n 個元素

轉(zhuǎn)換類

  • map —— 轉(zhuǎn)換成另一個集合(與上面我們實現(xiàn)的 convert 方法作用一樣);
  • mapIndexed —— 除了轉(zhuǎn)換成另一個集合,還可以拿到Index(下標);
  • mapNotNull —— 執(zhí)行轉(zhuǎn)換前過濾掉 為 NULL 的元素
  • flatMap —— 自定義邏輯合并兩個集合;
  • groupBy —— 按照某個條件分組,返回Map;

排序類

  • reversed —— 反序
  • sorted —— 升序
  • sortedBy —— 自定義排序
  • sortedDescending —— 降序

個人微信號:zhaoyanjun125 , 歡迎關(guān)注

總結(jié)

以上是生活随笔為你收集整理的Kotlin实战指南八:高阶函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。