网站友情链接怎么添加,wordpress 外卖,代运营服务,做网站业务的怎么找资源1 前言 序列#xff08;Sequence#xff09;是 Kotlin 中为方便操作集合及其元素而定制的接口#xff0c;是一个延迟获取数据的集合#xff0c;只有需要元素时才会生产元素。在处理大量数据时#xff0c;序列可以显著地提升性能。 Sequence 类似 Java 中的 Stream#xf…1 前言 序列Sequence是 Kotlin 中为方便操作集合及其元素而定制的接口是一个延迟获取数据的集合只有需要元素时才会生产元素。在处理大量数据时序列可以显著地提升性能。 Sequence 类似 Java 中的 Stream详见 → Stream 总结。Sequence 有中间操作和终端操作如下。
中间操作每次操作返回一个新的 Sequence 对象主要操作有filter、distinct、drop、take、sorted、sortedDescending、map、mapIndexed、minus 等。终端操作每次操作返回一个值或集合每个序列只能进行一次终端操作主要操作有forEach、joinToString、min、max、count、sum、average、any、first、last、reduce 等。
2 Sequence 的创建
2.1 sequenceOf
var sequence sequenceOf(1, 2, 3)
2.2 asSequence 1IntRange
var intRange 1..10
var sequence intRange.asSequence() 2Array
var array arrayOf(1, 2, 3)
var sequence array.asSequence() 3List
var list listOf(AA, BBB, CC)
var sequence list.asSequence() 4Set
var set setOf(AA, BBB, CC)
var sequence set.asSequence()
2.3 BufferedReader
val reader BufferedReader(FileReader(G:\\stream.txt))
val sequence reader.lineSequence()
2.4 generateSequence
var sequence generateSequence(arrayOf(1, 1)) { arr -arrayOf(arr[1], arr[0] arr[1])}.take(10).map { arr - arr[0] }
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
println(sequence.joinToString())
3 Sequence 的中间操作
3.1 主要接口
// 过滤
public fun T SequenceT.filter(predicate: (T) - Boolean): SequenceT
// 去重
public fun T SequenceT.distinct(): SequenceT
// 丢弃前 n 个元素
public fun T SequenceT.drop(n: Int): SequenceT
// 截取前 n 个元素
public fun T SequenceT.take(n: Int): SequenceT
// 排序(升序)
public fun T : ComparableT SequenceT.sorted(): SequenceT
// 排序(降序)
public fun T : ComparableT SequenceT.sortedDescending(): SequenceT
// 映射(T - R)
public fun T, R SequenceT.map(transform: (T) - R): SequenceR
// 映射(index, T - R)
public fun T, R SequenceT.mapIndexed(transform: (index: Int, T) - R): SequenceR
// 删除序列中第一个 element
public operator fun T SequenceT.minus(element: T): SequenceT
3.2 案例
fun main() {var sequence sequenceOf(4, 9, 1, 8, 5, 5, 7, 3, 6, 2)sequence.filter { e - e 2 e 8 } // 4 5 5 7 3 6.distinct() // 4 5 7 3 6.drop(1) // 5 7 3 6.take(3) // 5 7 3.sorted() // 3 5 7.map { e - e * e } // 9 25 49.forEach(::println)
}
4 Sequence 的终端操作
4.1 主要接口 1统计函数
// 最小值
public fun T : ComparableT SequenceT.min(): T?
// 最大值
public fun T : ComparableT SequenceT.max(): T?
// 元素个数
public fun T SequenceT.count(): Int
// 求和
public fun SequenceInt.sum(): Int
// 求平均值
public fun SequenceInt.average(): Double
// 序列中是否有元素
public fun T SequenceT.any(): Boolean
// 获取第一个元素
public fun T SequenceT.first(): T
// 获取最后一个元素
public fun T SequenceT.last(): T 2遍历元素
// 遍历元素
public inline fun T SequenceT.forEach(action: (T) - Unit): Unit 3拼接元素
// 转换为字符串
public fun T SequenceT.joinToString(separator: CharSequence , , prefix: CharSequence , postfix: CharSequence , limit: Int -1, truncated: CharSequence ..., transform: ((T) - CharSequence)? null): String 4规约运算
// 规约运算定义运算 o, result ((((e1 o e2)) o e3) o e4) o ...
public inline fun S, T : S SequenceT.reduce(operation: (acc: S, T) - S): S 5集合转换
public fun T SequenceT.toList(): ListT
public fun T SequenceT.toMutableList(): MutableListT
public fun T SequenceT.toSet(): SetT
public fun T SequenceT.toMutableSet(): MutableSetT
public fun T SequenceT.toHashSet(): HashSetT
public fun T : ComparableT SequenceT.toSortedSet(): java.util.SortedSetT
4.2 案例 1统计函数
fun main() {var sequence sequenceOf(1, 3, 5)var min sequence.min() // 1var max sequence.max() // 5var count sequence.count() // 3var sum sequence.sum() // 9var avg sequence.average() // 3var hasElement sequence.any() // truevar first sequence.first() // 1var last sequence.last() // 5
} 2遍历元素
fun main() {var sequence sequenceOf(1, 3, 5)sequence.forEach(::println) // 1、3、5
} 3拼接元素
fun main() {var sequence sequenceOf(1, 3, 5)var str sequence.joinToString(,, [, ])
} 4规约运算
fun main() {var sequence sequenceOf(1, 3, 5)var sum sequence.reduce(Integer::sum) // 9// 1*1-3*3-8, (-8)*(-8)-5*539var res sequence.reduce { e1, e2 - e1 * e1 - e2 * e2 } // 39
} 5集合转换
fun main() {val sequence sequenceOf(1, 2, 3)var list sequence.toList()var mutableList sequence.toMutableList()var set sequence.toSet()var mutableSet sequence.toMutableSet()var hashSet sequence.toHashSet()var sortedSet sequence.toSortedSet()
}