Kotlin collections 函数表

Types

Grouping<T, out K>

分类集合,T代表element对象,K代表分类标记值

通过groupingBy获取实例对象

  • eachCount: Map<K, Int>
    获取每种分类的数量

  • eachCountTo(destination: MutableMap<in K, Int>): MutableMap<in K, Int>
    获取分类数量并将结果加成到已有计算表destination中

  • aggregate(operation: (key: K, accumulator: R?, element: T, first: Boolean) -> R): Map<K, R>
    通过一个函数(operation)混合每种分类中每个元素的结果
    accumulator为当前分类K的历史混合值,初始值为null,element为当前运算中K分类的某个元素项,first显示element是否当前分类K中的第一个元素

  • aggregateTo(destination: Map<K, R>, operation): Map<K, R>
    同上,混合元素并将结果加成到已有计算表destination中

  • fold(initialValueSelector: (key: K, element: T) -> R, operation: (key: K, accumulator: R, element: T) -> R): Map<K, R>
    同aggregate,但每个分类K的首元素的operation运算中,accumulator初始值将由initialValueSelector函数提供(foldTo方法同理)

  • fold(initialValue: R, operation: (accumulator: R, element: T) -> R): Map<K, R>
    忽略分类K值的fold版本,每个分类的accumulator均为initialValue(foldTo方法同理)

  • reduce(operation: (key: K, accumulator: S, element: T) -> S): Map<K, S>
    同aggregate,但每个分类从第二位元素开始混合,accumulator初始值为当前分类K中的第一个元素值(reduceTo同理)

Functions

增删

  • addAll(elements: Iterable<T>): Boolean
    MutableMap<in K, in V>.putAll(pairs: Array<out Pair<K, V>>)
    添加另一个集合的所有元素
  • remove(element: T): Boolean
    remove(key: K): V?
    remove(key: K, value: V): Boolean
    removeAll(elements: Collection<T>): Boolean
    removeAll(predicate: (T) -> Boolean): Boolean
    除去集合中的指定元素(集)
  • retainAll(elements: Collection<T>): Boolean
    retainAll(predicate: (T) -> Boolean): Boolean
    当前集合仅保留指定的元素

变换

  • fill(element: T, fromIndex: Int = 0, toIndex: Int = size)
    使用指定值填充Array或MutableList
  • reverse()
    reversed(): List<T>
    reversedArray(): Array<T>
    翻转元素顺序(并作为新对象返回)
  • shuffle()
    shuffle(random: Random)
    shuffled(): List<T>
    shuffled(random: Random): List<T>
    混淆元素顺序(并作为新对象返回)
  • sort()
    sort(fromIndex: Int = 0, toIndex: Int = size)
    sortDescending()
    排序数值型或Comparable型集合(或倒序排序)
  • sort(comparison: (a: T, b: T) -> Int)
    通过comparison函数排序
  • sortBy(selector: (T) -> R?)
    sortByDescending(selector: (T) -> R?)
    通过selector函数将集合元素转换为Comparable对象,并进行排序(或倒序排序)
  • sortWith(comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size)
    通过comparator对象进行排序
  • sorted(): List<T>
    sortedDescending(): List<T>
    sortedArray(): Array<T>
    sortedArrayDescending(): Array<T>
    sortedBy(selector: (T) -> R?): List<T>
    sortedByDescending(selector: (T) -> R?): List<T>
    sortedWith(comparator: Comparator<in T>): List<T>
    sortedArrayWith(comparator: Comparator<in T>): Array<out T>
    排序并返回新结果对象

映射转换

  • asIterable / asList / asSequence
    映射为Iterable、List、Sequence对象
  • asReversed
    映射为倒序列表(仅用于List、MutableList),原列表数据变动时自动反映到该倒序列表对象
  • associate(transform: (T) -> Pair<K, V>): Map<K, V>
    associateBy(keySelector: (T) -> K): Map<K, T>
    通过函数transform或keySelector,将每个元素关联至一个指定Key值,生成Map对象(associateTo、associateByTo同理)
  • chunked(size: Int): List<List<T>>
    chunked(size: Int, transform: (List<T>) -> R): List<R>
    按指定长度切割成多个子列表(仅用于Iterable,可通过transform函数转换结果为特定类型对象(仅用于Iterable)
  • flatMap(transform: (T) -> Iterable<R>): List<R>
    flatMap(transform: (Entry<K, V>) -> Iterable<R>): List<R>
    将集合中每个元素通过transform函数映射成每个子集合,并将所有子集合的所有元素合并成单一List序列(flatMapTo同理)
  • Array<out Array<out T>>.flatten(): List<T>
    将元素数组的数组(二维数组)平铺成一维列表
  • fold(initial: R, operation: (acc: R, T) -> R): R
    foldIndexed(initial: R, operation: (index: Int, acc: R, T) -> R): R
    通过operation函数混合(加成)集合中每个元素T,生成中间及返回最终结果R,初始值由initial提供
  • foldRight(initial: R, operation: (T, acc: R) -> R): R
    foldRightIndexed(initial: R, operation: (index: Int, T, acc: R) -> R): R
    逆序混合
  • groupBy(keySelector: (T) -> K): Map<K, List<T>>
    groupBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, List<V>>
    groupingBy(keySelector: (T) -> K): Grouping<T, K>
    以keySelector指定的条件分类出集合中同类元素 T,分类标识为 K,可通过valueTransform函数计算元素 T 的映射值(groupByTo同理)
  • joinTo(buffer: Appendable, separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = "", limit: Int = -1, truncated: CharSequence = "...", transform: (T) -> CharSequence = null): Appendable
    将集合内每个元素通过transform函数转换为字符串,append到buffer对象,字符串分隔符通过separator定义,buffer分别追加prefix和postfix作为元素集合的起始、结束标记,使用limit限制元素数量时,超出限制的部分将以单独一个truncated标记取代,作为最终的集合元素,最后返回buffer对象本身(joinToString相似,使用内建buffer并直接返回String类型)
  • map(transform: (T) -> R): List<R>
    mapTo(destination: C, transform: (T) -> R): C
    mapNotNull(transform: (T) -> R?): List<R>
    mapNotNullTo(destination: C, transform: (T) -> R?): C
    mapIndexed(transform: (index: Int, T) -> R): List<R>
    mapIndexedTo(destination: C, transform: (index: Int, T) -> R): C
    mapIndexedNotNull(transform: (index: Int, T) -> R?): List<R>
    mapIndexedNotNullTo(destination: C, transform: (index: Int, T) -> R?): C
    集合内每个元素通过transform函数计算转换,返回结果列表
  • Map<out K, V>.mapKeys(transform: (Entry<K, V>) -> R): Map<R, V>
    Map<out K, V>.mapKeysTo(destination: M, transform: (Entry<K, V>) -> R): M
    Map<out K, V>.mapValues(transform: (Entry<K, V>) -> R): Map<K, R>
    Map<out K, V>.mapValuesTo(destination: M, transform: (Entry<K, V>) -> R): M
    Map对象内每个键值对通过transform函数计算转换其Key或Value值,重新组合并返回结果Map
  • partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>>
    通过predicate函数,根据集合内每个元素的布尔返回值,切分集合为两个列表对象
  • reduce(operation: (accumulator: S, T) -> S): S
    reduceIndexed(operation: (index: Int, acc: S, T) -> S): S
    通过operation函数,从集合第二个元素T开始混合加成结果S,accumulator初始值为第一个元素值
  • reduceRight(operation: (T, acc: S) -> S): S
    reduceRightIndexed(operation: (index: Int, T, acc: S) -> S): S
    逆序混合(集合元素从右侧开始向左侧混合)
  • toCollection(destination: C): C
    集合所有元素添加到指定collection对象并返回
  • Entry<K, V>.toPair(): Pair<K, V>
    Entry转换至Pair类型
  • Map<String, String>.toProperties(): Properties
    Map转换至Properties类型
  • ByteArray.toString(charset: Charset): String
    ByteArray根据指定charset转换为String类型
  • toTypedArray(): Array<T>
    从某种原始类型Array转换为装箱类型Array
  • windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<List<T>>
    windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (List<T>) -> R): List<R>
    返回一个集合的一系列快照组成的列表,每个快照尺寸为size,起始位置为上个快照的起始元素加上step步进数,partialWindows指定最后的快照元素不足于指定size时,是否继续生成小尺寸快照对象,可通过transform函数转换成指定的快照对象类型
  • Map<K, V>.withDefault(defaultValue: (key: K) -> V): Map<K, V>
    生成一个内含指定默认值计算函数的Map对象
  • withIndex(): Iterable<IndexedValue<T>>
    withIndex(): Iterator<IndexedValue<T>>
    从集合返回一个包含元素下标索引的Iterable对象,通常用于for循环中:for ((index, value) in list.withIndex())
  • Iterable<T> zip Iterable<R>: List<Pair<T, R>>
    Iterable<T>.zip(other: Iterable<R>, transform: (a: T, b: R) -> V): List<V>
    返回一个以Iterable<T>元素为key,以Iterable<R>元素为value组成的Pair列表,或通过transform函数转换为V类型结果对象的列表
  • zipWithNext(): List<Pair<T, T>>
    zipWithNext(transform: (a: T, b: T) -> R): List<R>
    集合中每个元素均与下一个元素结合(不消耗该元素),组成Pair或R对象,生成结果列表(列表大小与原列表相同)
  • Iterable<Pair<T, R>>.unzip(): Pair<List<T>, List<R>>
    从Pair列表解析出Key列表和Value列表组成的Pair对象

过滤

  • copyOf(): Array<T>
    copyOf(newSize: Int): Array<T?>
    copyOfRange(fromIndex: Int, toIndex: Int): Array<T>
    拷贝Array内容到新Array对象,newSize可用于限定拷贝原Array的内容最大数量(小于Array长度)
  • distinct(): List<T>
    过滤掉重复元素
  • distinctBy(selector: (T) -> K): List<T>
    根据selector函数的返回值过滤重复元素
  • drop(n: Int): List<T>、dropLast(n: Int): List<T>
    删除集合头、尾的n个元素
  • dropWhile(predicate: (T) -> Boolean): List<T>
    dropLastWhile(predicate: (T) -> Boolean): List<T>
    删除集合头、尾中符合predicate函数指定条件的连续片段(直到遍历到第一个判定为false的元素)
  • filter(predicate: (T) -> Boolean): List<T>
    filterIndexed(predicate: (index: Int, T) -> Boolean): List<T>
    过滤集合元素(仅提取predicate函数计算值为true的元素,filterTo、filterIndexedTo同理)
  • filterIsInstance(): List<R>
    filterIsInstance(klass: Class<R>): List<R>
    从无类型集合中过滤出对象为返回值R类型的元素(filterIsInstanceTo同理)
  • filterKeys(predicate: (K) -> Boolean): Map<K, V>
    filterValues(predicate: (V) -> Boolean): Map<K, V>
    通过Key值、Value值过滤Map元素
  • filterNot(predicate: (T) -> Boolean): List<T>
    过滤集合元素(仅提取predicate函数计算值为false的元素,filterNotTo同理)
  • filterNotNull(): List<T>
    过滤出非null元素(filterNotNullTo同理)
  • minusElement(element: T): List<T>
    plusElement(element: T): List<T>
    返回除去(第一个)指定元素、或增加一个指定元素的列表
  • slice(indices: IntRange): List<T>
    slice(indices: Iterable<Int>): List<T>
    sliceArray(indices: IntRange): Array<T>
    sliceArray(indices: Collection<Int>): Array<T>
    裁剪出指定范围的子集并返回

集合操作

通常可通过运算符 + - += -= 直接操作集合运算

  • Iterable<T>1 intersect Iterable<T>2: Set<T>
    两集合相交,取其中共同的对象子集
  • Iterable<T>1 subtract Iterable<T>2: Set<T>
    返回一个从Iterable1除去Iterable2子集的Set类型结果
  • Iterable<T>1 union Iterable<T>2: Set<T>
    返回一个Iterable1加上Iterable2的Set类型超集结果

判断

  • all(predicate: (T) -> Boolean): Boolean
    判断一个集合中是否每个元素都符合函数predicate限定的条件
  • any(): Boolean
    any(predicate: (T) -> Boolean): Boolean
    判断一个集合中是否存在至少一个元素(符合函数predicate限定的条件)
  • contains、containsAll(elements: Collection<T>): Boolean
    判断指定集合是否包含特定元素(集)
  • containsKey、containsValue
    判断Map对象中是否包含特定Key、Value
  • contentDeepEquals、contentDeepHashCode、contentDeepToString
    通过Array内容进行迭代比较、计算哈希值或字符串(包括嵌套Array内容)
  • contentEquals、contentHashCode、contentToString
    通过Array内容进行比较、计算哈希值或字符串(不包括嵌套Array内容)
  • isEmpty / isNotEmpty
    判断集合是否为空
  • max / min
    返回数值型或Comparable型集合的最大、最小元素,不存在时返回null
  • maxBy(selector: (T) -> R): T?
    minBy(selector: (T) -> R): T?
    通过selector函数将集合或Map元素转换为Comparable对象,比较并返回最大、最小元素
  • maxWith(comparator: Comparator<in T>): T?
    minWith(comparator: Comparator<in T>): T?
    通过comparator对象比较并返回最大、最小元素
  • none(): Boolean
    none(predicate: (T) -> Boolean): Boolean
    判断一个集合是否为空(或没有一个元素符合函数predicate限定的条件)
  • Collection<T>?.orEmpty(): Collection<T>
    返回非null的调用对象,或返回一个新建的空集合对象
  • requireNoNulls()
    判断集合是否包含null元素,返回集合本身,或抛出异常

计算

  • average(): Double
    计算出集合元素的平均值(仅用于数值型Array、Iterable)
  • count(): Int
    count(predicate: (T) -> Boolean): Int
    计算出集合的元素数量,predicate函数可用于指定过滤条件
  • sum()
    计算出集合元素的总和值(仅用于数值型Array、Iterable)
  • sumBy(selector: (T) -> Int): Int
    sumByDouble(selector: (T) -> Double): Double
    通过selector函数计算集合元素的总和值

查找提取

  • binarySearch(element: T, comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size): Int
    通过二分查找算法寻找特定对象element的下标索引位置(要求集合已经过comparator函数排序)
  • elementAt(index: Int)
    elementAtOrElse(index: Int, defaultValue: (Int) -> T)
    elementAtOrNull(index: Int)
    提取指定下标的元素,超出下标范围时分别抛出异常、返回默认值、返回null
  • find(predicate: (T) -> Boolean)
    findLast(predicate: (T) -> Boolean)
    从集合首、尾开始搜索第一个符合predicate条件的元素,不存在时返回null
  • first() / first(predicate: (T) -> Boolean)
    firstOrNull() / firstOrNull(predicate: (T) -> Boolean)
    last() / last(predicate: (T) -> Boolean)
    lastOrNull() / lastOrNull(predicate: (T) -> Boolean)
    从集合中提取第一个或最后一个(符合predicate条件的)元素,不存在时抛出异常,或返回null
  • getValue(key: K): V
    get(key: K): V?
    getOrDefault(key: K, defaultValue: V): V
    getOrElse(key: K, defaultValue: () -> V): V
    getOrPut(key: K, defaultValue: () -> V): V
    从Map中获取指定元素值,不存在时分别抛出异常、返回null或defaultValue(或存储该defaultValue值)
  • getOrNull(index: Int): T?
    getOrElse(index: Int, defaultValue: (Int) -> T): T
    从集合中获取指定下标的元素值,不存在时分别返回null或defaultValue
  • indexOf(element: T): Int
    lastIndexOf(element: T): Int
    indexOfFirst(predicate: (T) -> Boolean): Int
    indexOfLast(predicate: (T) -> Boolean): Int
    从集合中获取指定元素或首个、最后一个符合predicate条件的元素下标索引,不存在时返回-1
  • single(): T
    single(predicate: (T) -> Boolean): T
    singleOrNull(): T?
    singleOrNull(predicate: (T) -> Boolean): T?
    返回集合的唯一(符合指定条件的)元素,空集合或存在多于两个元素时抛出异常,或返回null
  • take(n: Int): List<T>
    takeLast(n: Int): List<T>
    提取前、后n个元素作为新列表对象返回
  • takeWhile(predicate: (T) -> Boolean): List<T>
    takeLastWhile(predicate: (T) -> Boolean): List<T>
    提取符合predicate函数指定条件的第一个、最后一个元素并作为新列表对象返回

遍历

  • forEach(action: (T) -> Unit): Unit
  • forEachIndexed(action: (index: Int, T) -> Unit): Unit
  • onEach(action: (T) -> Unit): self
  • onEachIndexed(action: (index: Int, T) -> Unit): self
  • 对每个元素执行action函数运算(并返回对用对象本身)

参考

Package kotlin.collections

kotlin.collections.Collections

kotlin.collections._Collections.kt

kotlin.collections._Arrays

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

推荐阅读更多精彩内容