Kotlin 集合小记

list操作方法解析:
.any
如果至少有一个元素符合给出的判断条件,则返回true

val list = listOf(1,2,3,4,5,6)
list.any(it % 2 == 0) // true
list.any(it > 10) //false

.all
如果全部的元素符合给出的判断条件,则返回true

list.all{it < 10} // true
list.all{it % 2 == 0} //false

.count
返回符合给出判断条件的元素总数

list.count{it % 2 == 0}//3

在一个初始值的基础上从第一项到最后一项通过一个函数累计所有的元素

list.fold(4){total,next -> total + next} // 25

与fold一样,但是顺序是从最后一项到第一项

list.foldRight(4){total,next->total+next}//25

遍历所有元素,并执行给定的操作

list.forEach{ println(it) }

与forEach,但是同时可以得到元素的index

list.forEachIndexed{ index,value -> println("position $index contains a $value")}

.max
返回最大的一项,如果没有则返回null

list.max() // 6

.maxBy
根据给定的函数返回最大的一项,如果没有则返回null

// The element whose negative is greater
list.maxBy{-it} // 1

.min .minBy 同max maxBy(反)
.none
如果没有任何元素与给定的函数匹配,则返回true

// No elements are divisible by 7
list.none{it % 7 == 0} //true

.reduce
与fold一样,但是没有一个初始值。通过一个函数从第一项到最后一项进行累计

list.reduce{total,next -> total+next} //21

.reduceRight 与reduce一样,但是顺序是从最后一项到第一项
.sumBy
返回所有每一项通过函数转换之后的数据的总和

list.sumBy{ it%2 } // 3

.drop
返回包含去掉前n个元素的所有元素的列表

list.drop(4) // listOf(5,6)

.dropWhile
返回根据给定函数从第一项开始去掉指定元素的列表

list.dropWhile{it<3} // listOf(3,4,5,6)

.dropLastWhile
返回根据给定函数从最后一项开始去掉指定元素的列表

list.dropLastWhile{it>4} // listOf(1,2,3,4)

.filter
过滤所有符合给定函数条件的元素

list.filter{it%2 == 0} // listOf(2,4,6)

.filterNot
过滤所有不符合给定函数条件的元素

list.filterNot{ it % 2 == 0} // listOf(1,3,5)

.filterNotNull
过滤所有元素中不是null的元素
.slice
过滤一个list中指定index的元素

list.slice(listOf(1,3,4)) // listOf(2,4,5)

.take
返回从第一个开始的n个元素

list.take(2) // listOf(1,2)

.takeLast
返回从最后一个开始的n个元素

list.takeLast(2) // listOf(5,6)

.takeWhile
返回从第一个开始符合给定函数条件的元素

list.takeWhile{ it < 3} // listOf(1,2)

.flatMap
遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中

list.flatMap{listOf(it,it+1)}// listOf(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7)

.groupBy
返回一个根据给定函数分组后的map

list.groupBy{ if(it % 2 == 0) "even" else "odd"} // {odd=[1, 3, 5], even=[2, 4, 6]}

.map
返回一个每一个元素根据给定的函数转换所组成的list

list.map{it*2} //listOf(2,4,6,8,10,12)

.mapIndexed
返回一个每一个元素根据给定的包含元素index的函数转换所组成的list(索引值与对应值的函数关系)

list.mapIndexed{index,it->index*it}//listOf (0, 2, 6, 12, 20, 30)

.mapNotNull
返回一个每一个非null元素根据给定的函数转换所组成的list
.contains
如果指定元素可以在集合中找到,则返回true
.elementAt
返回给定index对应的元素,如果index数组越界则会抛出IndexOutOfBoundsException
.elementAtOrElse
返回给定index对应的元素,如果index数组越界则会根据给定函数返回默认值

list.elementAtOrElse(10){2*it} //20

.elementAtOrNull
返回给定index对应的元素,如果index数组越界则会返回null。
.first
返回符合给定函数条件的第一个元素

list.first{it%2 == 0} // 2

. firstOrNull
返回符合给定函数条件的第一个元素,如果没有符合则返回null。
. indexOf
返回指定元素的第一个index,如果不存在,则返回-1。

list.indexOf(4) // 3

. indexOfFirst
返回第一个符合给定函数条件的元素的index,如果没有符合则返回-1。

list.indexOfFirst { it % 2 == 0 } // 1

. indexOfLast
返回最后一个符合给定函数条件的元素index,如果没有符合则返回-1

list.indexOfLast { it % 2 == 0 } // 5

.last
返回符合给定函数条件的最后一个元素

 list.last { it % 2 == 0 } // 6

. lastIndexOf
返回指定元素的最后一个index,如果不存在,则返回-1。
. lastOrNull
返回符合给定函数条件的最后一个元素,如果没有符合则返回null。
.single
返回符合给定函数的单个元素,如果没有符合或者超过一个,则抛出异常。

list.single { it % 5 == 0 } // 5

. singleOrNull
返回符合给定函数的单个元素,如果没有符合或者超过一个,则返回null。
. merge
把两个集合合并成一个新的,相同index的元素通过给定的函数进行合并成新的元素作为新的集合的一个元素,返回这个新的集合。新的集合的大小由最小的那个集合大小决定。

val list = listOf(1, 2, 3, 4, 5, 6)
val listRepeated = listOf(2, 2, 3, 4, 5, 5, 6)
list.merge(listRepeated) { it1, it2 -> it1 + it2 }
// 结果 listOf(3, 4, 6, 8, 10, 11)

.partition
把一个给定的集合分割成两个,第一个集合是由原集合每一项元素匹配给定函数条件返回true的元素组成,第二个集合是由原集合每一项元素匹配给定函数条件返回false的元素组成。

list.partition(it % 2 == 0) // listOf(2,4,6)  listOf(1,3,5)

.plus
返回一个包含原集合和给定集合中所有元素的集合,因为函数的名字原因,我们可以使用+操作符

val list = listOf(1,2,3,4,5,6)
Timber.e("demo ${list.plus(listOf(7,8))} and ${list+ listOf(9,10)}")

.zip
返回由pair组成的list,每个pair由两个集合中相同index的元素组成。这个返回的list的大小由最小的那个集合决定

val list = listOf(1,2,3,4,5,6,7)
list.zip(listOf(7,8)) //[(1, 7), (2, 8)]

. unzip
从包含pair的List中生成包含List的Pair。

listOf(Pair(5, 7), Pair(6, 8)).unzip()// ([5, 6], [7, 8])

. reverse
返回一个与指定list相反顺序的list
.sort
返回一个自然排序后的list
.sortBy
返回一个根据指定函数排序后的list。
. sortDescending
返回一个降序排序后的List。
. sortDescendingBy
返回一个根据指定函数降序排序后的list

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 原文链接:https://github.com/EasyKotlin 本章将介绍Kotlin标准库中的集合类,我们...
    JackChen1024阅读 2,120评论 1 1
  • 集合是开发中非常常用的知识,比如操作各种数据集,各种算法,保存网络请求结果,作为Adapter数据集,如果你不会集...
    Knight_Davion阅读 16,093评论 1 22
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,674评论 0 38
  • [TOC] 前言 kotlin的集合分为不可变集合和可变集合 Kotlin 的 List<out T> 只提供只读...
    孤调阅读 496评论 0 1
  • 那一天,喜欢上了一首歌,她好像你。 那一天,梦醒了,只是梦里依然没有你。 那一天,我开始学着你的样子微笑,可惜有些...
    三叶草耶阅读 349评论 4 3