Kotlin List Exercise

489 阅读2分钟

fold函数

list的foldreduce通俗易懂的例子见Reference中。

下图中的🌰 很好的利用了fold函数解决了去除list中相邻重复元素的问题。

(其中emptyList<T>的写法略高级,不用根据类型来建造initial value了

⚠️kotlin中fold默认是大众概念里的foldLeft,是从左至右进行accumulate的,这点从源码的方法注释和方法体中可以看出来👇,而foldRight即是本义,从右至左进行accumulate,注意foldRight的两个参数是调换顺序的,第二个元素为result。

takeWhile

👆pack consecutive duplicates of list elements into sublist

其中takeWhile是拿出list中前几个element,直取到第一个不满足条件的element时停止。

List(count){value}

其中count的类型是Int,上述表达式是在list中加入count个value。

flatMap && map

用flatMap可以改变list的长度,而用map只能保持和原list相同的长度。

filterIndexed

如果想直接用index做一个list的filter的话,可以用filterIndexed函数,取代filter函数👇

when表达式

注意上图中when表达式接受了一个number作为参数,接下来有多个分支检测number的值,这里number不能用greater than (>),或者less than(<0)这种表达,但是可以用in range (1...10) 这种写法。替代的方案之一如下图所示👇

已知起始数值,得到一个range的数组

(from..to).toList()

all 函数

list.all{condition} 返回Boolean结果,判断是否list中所有的元素都满足condition中的条件。举个🌰 

GroupBy 分组

Kotlin标准库提供用于对集合元素进行分组的扩展函数。基本函数groupBy()使用一个lambda函数并返回一个Map. 在此Map中,每个键都是lambda结果,而对应的值是返回此结果的元素List. 举个🌰 :

上述例子中,用groupBy将String列表按首字母分组,得到一个key为首字母的大写,value为列表中对应的元素们。

Reference

Fold🌰